#include <bits/stdc++.h>
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
#pragma GCC optimize("O2")
using namespace std;
void timestamp(char const* const tag, bool absolute = false);
long long k, pa, pb;
void read() { cin >> k >> pa >> pb; }
long long mul_inv(long long a, long long b) {
  long long b0 = b, t, q;
  long long x0 = 0, x1 = 1;
  if (b == 1) return 1;
  while (a > 1) {
    q = a / b;
    t = b, b = a % b, a = t;
    t = x0, x0 = x1 - q * x0, x1 = t;
  }
  if (x1 < 0) x1 += b0;
  return x1;
}
inline long long modinv(long long x) { return mul_inv(x, 1000000007); }
inline long long mod(long long i) {
  return (i % 1000000007 + 1000000007) % 1000000007;
}
void solve() {
  long long inv_papb = modinv(pa + pb);
  long long fa = mod(pa * inv_papb);
  long long fb = mod(pb * inv_papb);
  vector<long long> sum_series;
  sum_series.reserve(k);
  for (size_t i = 0; i < (k); ++i) {
    long long kk = i + k;
    long long sum =
        mod(mod(fa + kk - fa * kk) * modinv(mod((1 - fa) * (1 - fa))));
    sum_series.push_back(sum);
  }
  vector<long long> faps = {1};
  faps.reserve(k);
  for (size_t i = 0; i < (k); ++i) {
    faps.push_back(mod(faps.back() * fa));
  }
  vector<vector<int>> cache(k + 1);
  for (size_t i = 0; i < (k + 1); ++i) {
    cache[i].assign(k, -1);
  }
  for (int n = k; n >= 1; --n) {
    for (int g = k - 1; g >= (n > 1 ? n : 0); --g) {
      if (g + n >= k) {
        cache[n][g] = mod(fb * sum_series[g + n - k]);
      } else {
        long long v1 = 0;
        int end = k - (g + n);
        for (int s = 0; s < end; ++s) {
          assert(cache[n + s][g + n + s] != -1);
          v1 = mod(v1 + faps[s] * cache[n + s][g + n + s]);
        }
        long long v2 = mod(faps[end] * sum_series[0]);
        cache[n][g] = mod(fb * (v1 + v2));
      }
    }
  }
  assert(cache[1][0] != -1);
  long long result = cache[1][0];
  long long coeff = mod(fa * modinv(mod(1 - fb)));
  cout << mod(coeff * result) << endl;
}
void timestamp(char const* const tag, bool absolute) {
  static double last = 0;
  double now = (static_cast<double>(clock()) / CLOCKS_PER_SEC) * 1000;
  if (absolute) {
    ;
  } else {
    ;
    last = now;
  }
}
int main() {
  timestamp("start");
  read();
  timestamp("read()");
  solve();
  timestamp("solve()");
  timestamp("total", true);
  return 0;
}
