#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long fac[300011], inv[300011];
int F, W, H;
long long fastpower(long long v, long long p) {
  long long ret = 1;
  while (p > 0) {
    if (p % 2 == 1) {
      ret = ret * v;
      ret %= mod;
      p--;
    } else {
      v = v * v;
      v %= mod;
      p /= 2;
    }
  }
  return ret;
}
void init() {
  fac[0] = inv[0] = 1;
  for (int i = 1; i < 300011; ++i) {
    fac[i] = fac[i - 1] * i;
    inv[i] = inv[i - 1] * fastpower(i, mod - 2);
    fac[i] %= mod;
    inv[i] %= mod;
  }
}
long long C(int n, int k) {
  if (n < k) return 0;
  return ((fac[n] * inv[k]) % mod * inv[n - k]) % mod;
}
long long add(long long v, long long u) { return (v + u) % mod; }
long long cost(long long n, long long k, long long low) {
  n = n - k * low;
  if (n < 0) return 0;
  return C(n + k - 1, n);
}
long long calc(int num, int limit) {
  long long v1 = cost(F, num, 1) * cost(W, num, limit) * 2;
  long long v2 = cost(F, num, 1) * cost(W, num + 1, limit);
  long long v3 = cost(F, num, 1) * cost(W, num - 1, limit);
  return add(add(v1, v2), v3);
}
int main() {
  init();
  scanf("%d%d%d", &F, &W, &H);
  H++;
  if (W == 0) {
    printf("1\n");
    return 0;
  }
  if (W < H) {
    printf("0\n");
    return 0;
  }
  if (W == 0) {
    printf("1\n");
    return 0;
  }
  if (F == 0) {
    printf("1\n");
    return 0;
  }
  long long ans = 0;
  for (int i = 1; i <= F; ++i) {
    ans += calc(i, H);
    ans %= mod;
  }
  ans = ans + mod;
  ans %= mod;
  ans = ans * fastpower(C(W + F, W), mod - 2);
  ans = ans % mod;
  printf("%I64d\n", ans);
  return 0;
}
