#include <bits/stdc++.h>
using namespace std;
long double safe_sqrt(long double x) { return sqrt(max((long double)0.0, x)); }
long long GI(long long& x) { return scanf("%lld", &x); }
const long long MN = 100111;
const long long MOD = 1e9 + 7;
long long gt[MN], inv_gt[MN];
long long power(long long x, long long k) {
  if (k == 0) return 1;
  if (k == 1) return x % MOD;
  long long mid = power(x, k >> 1);
  mid = mid * mid % MOD;
  if (k & 1) return mid * x % MOD;
  return mid;
}
long long inverse(long long x) { return power(x, MOD - 2); }
long long C(long long n, long long k) {
  if (k < 0 || k > n) return 0;
  if (n < 0) return 0;
  return gt[n] * inv_gt[k] % MOD * inv_gt[n - k] % MOD;
}
long long seq(long long n, long long k) {
  if (n == 0) {
    if (k == 0) return 1;
    return 0;
  }
  if (k == 0) return 0;
  if (k > n) return 0;
  return C(n - 1, k - 1);
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout << (fixed) << setprecision(9);
  gt[0] = 1;
  for (long long i = (1), _b = (MN - 1); i <= _b; ++i)
    gt[i] = gt[i - 1] * i % MOD;
  for (long long i = (0), _b = (MN - 1); i <= _b; ++i)
    inv_gt[i] = inverse(gt[i]);
  long long sa, sb, h;
  while (cin >> sa >> sb >> h) {
    long long good = 0, all = 0;
    for (long long na = (0), _b = (sa); na <= _b; ++na) {
      for (long long nb = (na - 1), _b = (na + 1); nb <= _b; ++nb) {
        if (nb < 0 || nb > sb) continue;
        long long cur = seq(sa, na) * seq(sb, nb) % MOD;
        if (na == nb)
          all = (all + 2 * cur) % MOD;
        else
          all = (all + cur) % MOD;
        cur = 0;
        if ((h + 1) * nb <= sb) {
          cur = seq(sa, na) * seq(sb - h * nb, nb) % MOD;
        }
        if (na == nb)
          good = (good + 2 * cur) % MOD;
        else
          good = (good + cur) % MOD;
      }
    }
    cout << good * inverse(all) % MOD << endl;
  }
  return 0;
}
