#include <bits/stdc++.h>
using namespace std;
const long long modi = 1000000007;
const int maxn = 110000;
long long fact[maxn], invfact[maxn];
long long quickpow(long long base, long long times) {
  long long ans = 1;
  while (times) {
    if (times & 1) ans = (ans * base) % modi;
    base = base * base % modi;
    times >>= 1;
  }
  return ans;
}
long long C(long long upper, long long lower) {
  if (upper < 0) return 0;
  if (upper > lower) return 0;
  if (lower < 0) return 0;
  return fact[lower] * invfact[upper] % modi * invfact[lower - upper] % modi;
}
int main(int argc, char* argv[]) {
  long long f, w, h;
  cin >> f >> w >> h;
  fact[0] = invfact[0] = 1;
  if (f == 0) {
    if (w > h) {
      cout << 1 << endl;
    } else
      cout << 0 << endl;
    return 0;
  }
  if (w == 0) {
    cout << 1 << endl;
    return 0;
  }
  for (int i = 1; i <= 100000; ++i) {
    fact[i] = fact[i - 1] * i % modi;
    invfact[i] = quickpow(fact[i], modi - 2);
  }
  long long ct1 = 0;
  long long ct2 = 0;
  for (int i = 1; i <= w; ++i) {
    ct2 += C(i - 1, w - 1) *
           ((C(i - 2, f - 1) + 2 * C(i - 1, f - 1) + C(i, f - 1)) % modi) %
           modi;
    ct1 += C(i - 1, w - h * i - 1) *
           ((C(i - 2, f - 1) + 2 * C(i - 1, f - 1) + C(i, f - 1)) % modi) %
           modi;
    ct1 %= modi;
    ct2 %= modi;
  }
  cout << ct1 * quickpow(ct2, modi - 2) % modi << endl;
  return 0;
}
