#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5, MOD = 1e9 + 7;
int n;
long long fac[2][MAX_N + 1];
long long inverse(int x) {
  return x == 1 ? 1 : MOD - MOD / x * inverse(MOD % x) % MOD;
}
void init() {
  fac[0][0] = fac[1][0] = 1;
  for (int i = (1), i_ = (n); i <= i_; ++i) fac[0][i] = fac[0][i - 1] * i % MOD;
  fac[1][n] = inverse(fac[0][n]);
  for (int i = (n - 1), i_ = (1); i >= i_; --i)
    fac[1][i] = fac[1][i + 1] * (i + 1) % MOD;
}
inline long long C(long long n, long long k) {
  return n < 0 || k < 0 || k > n
             ? 0
             : fac[0][n] * fac[1][k] % MOD * fac[1][n - k] % MOD;
}
int main() {
  long long f, w, h;
  cin >> f >> w >> h;
  if (!f) {
    cout << (w > h) << endl;
    return 0;
  }
  if (!w) {
    cout << "1" << endl;
    return 0;
  }
  n = max(f, w) - 1;
  init();
  long long p = 0, q = 0;
  for (int i = (1), i_ = (f); i <= i_; ++i) {
    long long t = C(f - 1, i - 1);
    (q += t * (2 * C(w - 1, i - 1) + C(w - 1, i) + C(w - 1, i - 2))) %= MOD;
    (p += t * (2 * C(w - i * h - 1, i - 1) + C(w - (i + 1) * h - 1, i) +
               C(w - (i - 1) * h - 1, i - 2))) %= MOD;
  }
  cout << p * inverse(q) % MOD << endl;
  return 0;
}
