#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
struct F {
  long long A, B;
  F(long long _A, long long _B) {
    A = _A;
    B = _B;
  }
  F() {}
};
int k;
F pa, push_back;
int px, py;
F dp[1011][1011];
bool vis[1011][1011];
F operator+(F x, F y) {
  long long A = x.A * y.B + y.A * x.B;
  A %= mod;
  long long B = x.B * y.B;
  B %= mod;
  return F(A, B);
}
F operator-(F x, F y) {
  long long A = x.A * y.B - y.A * x.B;
  A %= mod;
  A += mod;
  A %= mod;
  long long B = x.B * y.B;
  B %= mod;
  return F(A, B);
}
F operator*(F x, F y) { return F((x.A * y.A) % mod, (x.B * y.B) % mod); }
F calc(long long sub) {
  F cur = F(k + 1, 1) * push_back + pa;
  cur = cur * pa;
  cur = cur * F(px + py, py);
  return cur;
}
F rec(int a, int sub) {
  if (vis[a][sub]) return dp[a][sub];
  vis[a][sub] = 1;
  F ret = F(0, 1);
  if (a + sub >= k) {
    ret = ret + push_back * F(a, 1);
  } else {
    ret = ret + push_back * (rec(a, sub + a) + F(a, 1));
  }
  if (a + 1 <= k) {
    ret = ret + pa * rec(a + 1, sub);
  } else {
    ret = ret + calc(sub);
  }
  return dp[a][sub] = ret;
}
long long bpow(long long x, long long n) {
  long long ans = 1;
  while (n > 0) {
    if (n & 1) ans *= x;
    x *= x;
    ans %= mod;
    x %= mod;
    n /= 2;
  }
  return ans;
}
int main() {
  cin >> k;
  cin >> px >> py;
  pa = F(px, px + py);
  push_back = F(py, px + py);
  F ans = rec(1, 0) * pa;
  ans = ans * F(px + py, px);
  ans.A *= bpow(ans.B, mod - 2);
  ans.A %= mod;
  cout << ans.A;
}
