#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void SetMin(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
inline void SetMax(T &a, T b) {
  if (b > a) a = b;
}
const double EPS = 1e-9;
int EQ(double a, double b) { return fabs(a - b) < EPS; }
complex<double> GetPoint() {
  double x, y;
  cin >> x >> y;
  return complex<double>(x, y);
}
void ShowPoint(complex<double> p) { cout << real(p) << "," << imag(p) << "\n"; }
double Cross(complex<double> a, complex<double> b) { return imag(conj(a) * b); }
double Dot(complex<double> a, complex<double> b) { return real(conj(a) * b); }
const long long M = 1000000007LL;
void Add(long long &a, long long b) { a = (a + b) % M; }
void Mul(long long &a, long long b) { a = (a * b) % M; }
long long Sum(long long a, long long b) { return (a + b) % M; }
long long Prod(long long a, long long b) { return (a * b) % M; }
long long FastPower(long long a, long long b) {
  if (b == 0LL) return 1;
  long long res = FastPower(a, b / 2LL);
  Mul(res, res);
  if (b % 2LL == 1LL) {
    Mul(res, a);
  }
  return res;
}
long long GetInv(long long x) { return FastPower(x, M - 2LL); }
long long ans;
int k;
long long pa, pb;
long long DP[1234][1234];
int main() {
  ios::sync_with_stdio(0);
  cout << fixed << setprecision(20);
  cin >> k >> pa >> pb;
  long long tail = (pa * GetInv(pb)) % M;
  long long temp = GetInv(pa + pb);
  Mul(pa, temp);
  Mul(pb, temp);
  ans = 0LL;
  memset(DP, 0, sizeof(DP));
  DP[0][1] = 1;
  for (int i = (0); i < (k); i++) {
    for (int j = (1); j < (k + 1); j++) {
      if (i + j >= k) {
        Add(ans, Prod(Prod(i + j, DP[i][j]), pb));
      } else {
        Add(DP[i + j][j], Prod(DP[i][j], pb));
      }
      Add(DP[i][j + 1], Prod(DP[i][j], pa));
    }
    Add(ans, Prod(i + k + 1, DP[i][k + 1]));
    Add(ans, Prod(DP[i][k + 1], tail));
  }
  cout << ans << endl;
  return 0;
}
