#include <bits/stdc++.h>
using pii = std::pair<int, int>;
using ll = long long;
int const MAXN = 111111 * 2;
ll const MOD = 1000000007;
ll f[MAXN], inv[MAXN];
int F, W, H;
ll egcd(ll a, ll b) {
  ll x = 1, y = 0;
  ll xL = 0, yL = 1;
  ll q, r, m, n;
  while (a != 0) {
    q = b / a;
    r = b % a;
    m = xL - q * x;
    n = yL - r * y;
    xL = x;
    yL = y;
    x = m;
    y = n;
    b = a;
    a = r;
  }
  return xL;
}
ll inverse(ll a, ll m) { return ((ll)egcd(a, m) + m) % m; }
void build() {
  f[0] = 1;
  inv[0] = inverse(f[0], MOD);
  for (int i = 1; i < MAXN; ++i) {
    f[i] = (f[i - 1] * i) % MOD;
    inv[i] = inverse(f[i], MOD);
  }
}
ll choose(ll n, ll k) {
  if (n < 0) return 0;
  if (k < 0 || k > n) return 0;
  return f[n] * inv[k] % MOD * inv[n - k] % MOD;
}
ll calc(ll f, ll x) {
  ll dub = f == x ? 2 : 1;
  return dub * choose(F - 1, f - 1) * choose(W - H * x - 1, x - 1) % MOD;
}
int main(int argc, char** argv) {
  std::ios_base::sync_with_stdio(false);
  std::cin >> F >> W >> H;
  if (W == 0) {
    std::cout << 1 << std::endl;
    return 0;
  } else if (F == 0) {
    std::cout << (W > H ? 1 : 0) << std::endl;
    return 0;
  }
  build();
  ll good = 0;
  for (int f = 0; f <= F; ++f)
    for (int x = f - 1; x <= f + 1; ++x) good = (good + calc(f, x)) % MOD;
  std::cout << (good * inverse(choose(F + W, W), MOD)) % MOD << std::endl;
}
