#include <bits/stdc++.h>
using namespace std;
int n, m, h;
int F[100005], F_[100005], ans1 = 0, ans2 = 0;
int fast(int x) {
  int re = 1;
  int t = 1000000007 - 2;
  while (t) {
    if (t & 1) re = 1ll * re * x % 1000000007;
    x = 1ll * x * x % 1000000007;
    t >>= 1;
  }
  return re;
}
int C(int x, int y) {
  if (x - y < 0 || x < 0 || y < 0) return 0;
  return 1ll * F[x] * F_[y] % 1000000007 * F_[x - y] % 1000000007;
}
void solve(int l, int r) {
  ans1 = (1ll * ans1 + 1ll * C(m - 1, l - 1) * C(n - 1, r - 1) % 1000000007) %
         1000000007;
  if (m > l * h) {
    if (m - 1ll * l * h - 1 >= 0)
      ans2 = (1ll * ans2 + 1ll * C(n - 1, r - 1) *
                               C(m - 1ll * l * h - 1, l - 1) % 1000000007) %
             1000000007;
  }
}
int main() {
  int i, k, j;
  scanf("%d%d%d", &n, &m, &h);
  int ans = 0;
  F[0] = 1, F_[0] = fast(1);
  for (i = 1; i < 100005; i++)
    F[i] = 1ll * F[i - 1] * i % 1000000007, F_[i] = fast(F[i]);
  for (i = 0; i <= m; i++) {
    for (k = -1; k <= 1; k++) {
      int l = i, r = i + k;
      if (r < 0) continue;
      if (!l && m) continue;
      if (!r && n) continue;
      if (r > n) continue;
      if (l && r) {
        solve(l, r);
        if (l == r) solve(l, r);
      } else {
        if (l) {
          ans1 = (1ll * ans1 + C(m - 1, l - 1)) % 1000000007;
          if (m > l * h) {
            ans2 = (1ll * ans2 + C(m - l * h - 1, l - 1)) % 1000000007;
          }
        } else if (r) {
          ans1 = (1ll * ans1 + C(n - 1, r - 1)) % 1000000007;
          ans2++, ans2 %= 1000000007;
        }
      }
    }
  }
  printf("%d", 1ll * ans2 * fast(ans1) % 1000000007);
  return 0;
}
