#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)(1E5 + 10) << 1;
const int MOD = 1E9 + 7;
long long inv[MAXN];
long long fac[MAXN], facinv[MAXN];
long long modExp(long long e, long long n, long long m = MOD) {
  long long ret = 1;
  for (; n; n >>= 1, e = e * e % m)
    if (n & 1) ret = ret * e % m;
  return ret;
}
void getInv(int n = MAXN - 1, long long m = MOD) {
  inv[0] = 0, inv[1] = 1;
  fac[0] = fac[1] = 1;
  facinv[0] = facinv[1] = 1;
  for (int i = 2; i <= n; ++i) {
    inv[i] = inv[m % i] * (m - m / i) % m;
    fac[i] = fac[i - 1] * i % m;
    facinv[i] = facinv[i - 1] * inv[i] % m;
  }
}
long long C(int n, int m) {
  return n < m || m < 0 ? 0 : fac[n] * facinv[m] % MOD * facinv[n - m] % MOD;
}
int main() {
  getInv();
  int f, w, h;
  scanf("%d%d%d", &f, &w, &h);
  if (f == 0)
    return puts(w > h ? "1" : "0"), 0;
  else if (w == 0)
    return puts("1"), 0;
  long long s0 = 0;
  for (int i = 1; i <= w; ++i) {
    if (f >= i - 1) s0 = (s0 + C(f - 1, i - 2) * C(w - 1, i - 1)) % MOD;
    if (f >= i) s0 = (s0 + C(f - 1, i - 1) * C(w - 1, i - 1) * 2) % MOD;
    if (f >= i + 1) s0 = (s0 + C(f - 1, i) * C(w - 1, i - 1)) % MOD;
  }
  long long s1 = 0;
  for (int i = 1; i <= w / (h + 1); ++i) {
    if (f >= i - 1) s1 = (s1 + C(f - 1, i - 2) * C(w - i * h - 1, i - 1)) % MOD;
    if (f >= i) s1 = (s1 + C(f - 1, i - 1) * C(w - i * h - 1, i - 1) * 2) % MOD;
    if (f >= i + 1) s1 = (s1 + C(f - 1, i) * C(w - i * h - 1, i - 1)) % MOD;
  }
  printf("%d\n", (int)(s1 * modExp(s0, MOD - 2) % MOD));
  return 0;
}
