#include <bits/stdc++.h>
using namespace std;
const bool deb = false;
template <typename T, typename C>
ostream &operator<<(ostream &os, pair<T, C> x) {
  return os << "<" << x.first << ", " << x.second << ">";
}
template <typename T>
auto operator<<(ostream &os, T x) ->
    typename enable_if<is_same<decltype(x.begin()), decltype(x.end())>::value &&
                           !is_same<T, string>::value,
                       ostream &>::type {
  os << "{";
  int cou = 0;
  for (auto c : x) {
    if (cou++) os << ", ";
    os << c;
  }
  return os << "}";
}
template <typename T>
string strmask(T r) {
  string ans;
  for (int i = 0; i < (8 * (int)sizeof(T)); i++) {
    ans += '0' + !!(((T)1 << i) & r);
    if (i % 5 == 4) ans += '.';
  }
  return ans;
}
const int MN = deb ? 700 : 2010;
const int mod = 1e9 + 7;
pair<long long, long double> dp[MN][MN][2];
pair<long long, long double> apr, bpr;
long long snatoheulcar(long long b, int e) {
  if (e == 0) return 1;
  if (e % 2) return snatoheulcar(b, e - 1) * b % mod;
  return snatoheulcar(b * b % mod, e / 2);
}
pair<long long, long double> operator+(pair<long long, long double> a,
                                       pair<long long, long double> b) {
  return make_pair((a.first + b.first) % mod, a.second + b.second);
}
pair<long long, long double> operator*(pair<long long, long double> a,
                                       pair<long long, long double> b) {
  return make_pair((a.first * b.first) % mod, a.second * b.second);
}
pair<long long, long double> make(int x) {
  return make_pair((long long)x, (long double)x);
}
pair<long long, long double> operator/(pair<long long, long double> a,
                                       pair<long long, long double> b) {
  return make_pair(a.first * snatoheulcar(b.first, mod - 2) % mod,
                   a.second / b.second);
}
pair<long long, long double> operator-(pair<long long, long double> a,
                                       pair<long long, long double> b) {
  return make_pair((a.first - b.first + mod) % mod, a.second - b.second);
}
pair<long long, long double> rpow(pair<long long, long double> a, int b) {
  if (b == 0) return make(1);
  if (b % 2) return rpow(a, b - 1) * a;
  return rpow(a * a, b / 2);
}
int main() {
  int k, pa, pb;
  scanf("%d%d%d", &k, &pa, &pb);
  apr = make(pa) / make(pa + pb);
  bpr = make(pb) / make(pa + pb);
  if (0)
    cout << "apr"
         << " = " << (apr) << ' ' << "bpr"
         << " = " << (bpr) << ' ' << endl;
  dp[1][0][0] = make(1);
  for (int a = 1; a <= (MN - 1); a++) {
    for (int pai = 0; pai <= (MN - 1); pai++) {
      pair<long long, long double> total = dp[a][pai][0] + dp[a][pai][1];
      if (a + 1 < MN) dp[a + 1][pai][0] = total * apr;
      if (a + pai < MN) dp[a][a + pai][1] = total * bpr;
    }
  }
  pair<long long, long double> ans = make(0);
  for (int a = 1; a <= (MN - 1); a++)
    for (int pairs = 0; pairs < (k); pairs++) {
      if (a == MN - 1) {
        if (0)
          cout << "dp"
               << "["
               << "a"
               << "]["
               << "pairs"
               << "]["
               << "0"
               << "] = "
               << "dp"
               << "[" << a << "][" << pairs << "][" << 0
               << "] = " << dp[a][pairs][0] << ' ' << endl;
        if (0)
          cout << "make(1) / apr"
               << " = " << (make(1) / apr) << ' ' << endl;
        if (0)
          cout << "make(a) + make(1) / bpr + make(pairs) - make(1)"
               << " = " << (make(a) + make(1) / bpr + make(pairs) - make(1))
               << ' ' << endl;
        if (0)
          cout << "ans += "
               << dp[a][pairs][0] *
                      (make(a) + make(1) / bpr + make(pairs) - make(1))
               << endl;
        ans = ans + dp[a][pairs][0] *
                        (make(a) + make(1) / bpr + make(pairs) - make(1));
      } else {
        int left = (k - pairs + a - 1) / a;
        if (0)
          cout << "a"
               << " = " << (a) << ' ' << "pairs"
               << " = " << (pairs) << ' ' << "left"
               << " = " << (left) << ' ' << endl;
        if (0)
          cout << "dp"
               << "["
               << "a"
               << "]["
               << "pairs"
               << "]["
               << "0"
               << "] = "
               << "dp"
               << "[" << a << "][" << pairs << "][" << 0
               << "] = " << dp[a][pairs][0] << ' ' << "make(pairs + left * a)"
               << " = " << (make(pairs + left * a)) << ' ' << "rpow(bpr, left)"
               << " = " << (rpow(bpr, left)) << ' ' << endl;
        if (0)
          cout << "ans += "
               << dp[a][pairs][0] * make(pairs + left * a) * rpow(bpr, left)
               << endl;
        ans = ans + dp[a][pairs][0] * make(pairs + left * a) * rpow(bpr, left);
      }
    }
  for (int a = 0; a < (3); a++)
    for (int pai = 0; pai < (7); pai++)
      if (0)
        cout << "dp"
             << "["
             << "a"
             << "]["
             << "pai"
             << "]["
             << "0"
             << "] = "
             << "dp"
             << "[" << a << "][" << pai << "][" << 0 << "] = " << dp[a][pai][0]
             << ' ' << "dp"
             << "["
             << "a"
             << "]["
             << "pai"
             << "]["
             << "1"
             << "] = "
             << "dp"
             << "[" << a << "][" << pai << "][" << 1 << "] = " << dp[a][pai][1]
             << ' ' << endl;
  if (0)
    cout << "ans"
         << " = " << (ans) << ' ' << endl;
  printf("%lld\n", (ans.first + mod) % mod);
}
