#include <bits/stdc++.h>
using namespace std;
void init() {}
const int N = 1e6 + 34;
const long long md = (long long)1e9 + 7;
long long o_1e6;
long long f[N], o[N];
long long fast_pow(long long a, long long deg) {
  if (deg == 0 || a == 0) return 1;
  if (deg % 2) return (a * fast_pow(a, deg - 1)) % md;
  long long q = fast_pow(a, deg / 2);
  return (q * q) % md;
}
long long putt(long long n, long long k) {
  return (((f[n - 1] * o[k - 1]) % md) * o[n - k]) % md;
}
long long cnt(long long f, long long w, long long n) {
  if (w < n || f < n - 1) return 0;
  long long res = putt(w, n);
  long long r2 = (n == 1 ? 0 : putt(f, n - 1));
  if (f - n >= 0) r2 += 2 * putt(f, n);
  if (f - n - 1 >= 0) r2 += putt(f, n + 1);
  return (res * r2) % md;
}
long long fi(long long x) {
  long long res = x;
  long long xx = x;
  for (long long i = 2; i * i <= xx; i++) {
    if (x % i == 0) {
      res = res * (i - 1) / i;
      while (x % i == 0) x /= i;
    }
  }
  if (x > 1) res = res * (x - 1) / x;
  return res;
}
int main() {
  init();
  o[1000000] = 397802501;
  for (long long i = 999999; i >= 1; i--) o[i] = (o[i + 1] * (i + 1)) % md;
  o[0] = 1;
  f[0] = 1;
  for (long long i = 1; i <= 1000000; i++) f[i] = (f[i - 1] * i) % md;
  long long f, w, h;
  cin >> f >> w >> h;
  long long all = 0, good = 0;
  if (f == 0) {
    if (w > h)
      cout << 1;
    else
      cout << 0;
    return 0;
  }
  if (w == 0) {
    cout << 1;
    return 0;
  }
  for (long long i = 1; i <= 110000; i++) {
    all = (all + cnt(f, w, i)) % md;
    good = (good + cnt(f, w - h * i, i)) % md;
  }
  if (good == 0 || all == 0) {
    cout << 0;
    return 0;
  }
  long long all_1 = fast_pow(all, fi(md) - 1);
  if ((all * all_1) % md != 1) {
    cerr << "fail\n";
    exit(34);
  }
  cout << (good * all_1) % md;
  return 0;
}
