#include <bits/stdc++.h>
using namespace std;
int dp[1001][1000], md = 1e9 + 7;
inline void ad(int &x, int y) {
  if ((x += y) >= md) x -= md;
}
inline int pw(int x, int p) {
  int an = 1;
  while (p) {
    if (p & 1) an = (long long)an * x % md;
    x = (long long)x * x % md;
    p >>= 1;
  }
  return an;
}
int geo(int r) {
  int z = 1 - r + md;
  if (z >= md) z -= md;
  z = pw(z, md - 2);
  return z;
}
int main() {
  int k, pa, pb;
  scanf("%d%d%d", &k, &pa, &pb);
  int p = pw(pa + pb, md - 2);
  pa = (long long)pa * p % md;
  pb = (long long)pb * p % md;
  dp[1][0] = pa;
  int an = 0;
  for (int i = 1; i < (int)(k); ++i)
    for (int j = 0; j < (int)(k); ++j) {
      int nk = j + i;
      if (nk >= k)
        ad(an, (long long)dp[i][j] * pb % md * (nk - k) % md);
      else
        ad(dp[i][nk], (long long)dp[i][j] * pb % md);
      ad(dp[i + 1][j], (long long)dp[i][j] * pa % md);
    }
  for (int i = 0; i < (int)(k); ++i) {
    int z = 1 - pa + md;
    if (z >= md) z -= md;
    z = pw(z, md - 2);
    int a = (long long)z * z % md * pa % md;
    ad(a, (long long)i * geo(pa) % md);
    ad(an, (long long)a * pb % md * dp[k][i] % md);
  }
  an = (long long)an * geo(pb) % md;
  printf("%d\n", an + k);
}
