#include <bits/stdc++.h>
using namespace std;
const int def = 250000;
long long f, w, h, i;
long long fact[300011], inv_fact[300011];
long long up, down;
long long poww(long long a, long long b) {
  long long ans = 1;
  while (b > 0) {
    if (b & 1) ans = (ans * a) % 1000000007;
    b >>= 1;
    a = (a * a) % 1000000007;
  }
  return ans;
}
void pre() {
  int i;
  fact[0] = 1;
  for (i = 1; i <= def; i++) fact[i] = (fact[i - 1] * i) % 1000000007;
  inv_fact[def] = poww(fact[def], 1000000007 - 2);
  for (i = def - 1; i > 0; i--)
    inv_fact[i] = (inv_fact[i + 1] * (i + 1)) % 1000000007;
  inv_fact[0] = 1;
}
long long comb(long long n, long long k) {
  if (n < 0 || k < 0) return 0;
  if (n < k) return 0;
  if (n == k) return 1;
  if (k == 0) return 1;
  return (((fact[n] * inv_fact[k]) % 1000000007) * inv_fact[n - k]) %
         1000000007;
}
pair<long long, long long> solve(long long wine, long long food) {
  if (wine < 0 || wine > w) return make_pair(0, 0);
  if (food < 0 || food > f) return make_pair(0, 0);
  long long up = 0;
  long long down = 0;
  if (w - wine * h >= wine)
    up = comb(w - wine * h - 1, wine - 1) * comb(f - 1, food - 1);
  down = comb(w - 1, wine - 1) * comb(f - 1, food - 1);
  return make_pair(up % 1000000007, down % 1000000007);
}
int main() {
  pre();
  scanf("%lld%lld%lld", &f, &w, &h);
  if (f == 0) {
    if (w > h)
      printf("1");
    else
      printf("0");
    return 0;
  }
  if (w == 0) {
    printf("1");
    return 0;
  }
  for (i = 1; i <= w; i++) {
    auto act = solve(i, i - 1);
    up += act.first;
    down += act.second;
    act = solve(i, i);
    up += 2LL * act.first;
    down += 2LL * act.second;
    act = solve(i, i + 1);
    up += act.first;
    down += act.second;
    up %= 1000000007;
    down %= 1000000007;
  }
  long long ans = up * poww(down, 1000000007 - 2);
  ans %= 1000000007;
  printf("%lld", ans);
  return 0;
}
