#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
const int M = 2e5 + 5;
int Mod_Pow(int x, int a) {
  int res = 1;
  for (; a; a >>= 1, x = (long long)x * x % P)
    if (a & 1) res = (long long)res * x % P;
  return res;
}
void Mod_add(int &a, int b) {
  if ((a += b) >= P) a -= P;
}
int Mod(int x) {
  if (x >= P) return x - P;
  return x;
}
int f[M], g[M], fac[M], inv[M];
int C_(int m, int n) { return fac[n] * (long long)inv[m] % P * inv[n - m] % P; }
int a, b, h;
int calc(int h) {
  int res = 0;
  for (int i = 2; i <= a + b; ++i) {
    int cta = (i >> 1) + (i & 1), ctb = (i >> 1);
    int la = a - cta, lb = b - ctb * h;
    if (lb < 0 || la < 0) break;
    int ca = C_(cta - 1, cta + la - 1);
    int cb = C_(ctb - 1, ctb + lb - 1);
    Mod_add(res, (long long)ca * cb % P);
  }
  for (int i = 2; i <= a + b; ++i) {
    int cta = (i >> 1), ctb = (i >> 1) + (i & 1);
    int la = a - cta, lb = b - ctb * h;
    if (lb < 0 || la < 0) break;
    int ca = C_(cta - 1, cta + la - 1);
    int cb = C_(ctb - 1, ctb + lb - 1);
    Mod_add(res, (long long)ca * cb % P);
  }
  return res;
}
int main() {
  cin >> a >> b >> h;
  if (b == 0) return puts("1"), 0;
  if (b <= h) return puts("0"), 0;
  if (a == 0) {
    if (b > h) return puts("1"), 0;
    return puts("0"), 0;
  }
  inv[0] = inv[1] = 1;
  for (int i = 2; i < M; ++i) inv[i] = (long long)(P - P / i) * inv[P % i] % P;
  for (int i = fac[0] = 1; i < M; ++i)
    fac[i] = fac[i - 1] * (long long)i % P,
    inv[i] = (long long)inv[i] * inv[i - 1] % P;
  int r1 = calc(h + 1), r2 = calc(1);
  cout << (long long)r1 * Mod_Pow(r2, P - 2) % P << endl;
  return 0;
}
