#include <bits/stdc++.h>
using namespace std;
const int MAX_N = (int)5e5 + 123;
const int mod = (int)1e9 + 7;
int first[MAX_N], _f[MAX_N];
int binpow(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = 1ll * res * a % mod;
    b >>= 1;
    a = 1ll * a * a % mod;
  }
  return res;
}
int C(int n, int k) {
  if (n < k || k < 0) return 0;
  int res = first[n];
  res = 1ll * res * _f[k] % mod;
  res = 1ll * res * _f[n - k] % mod;
  return res;
}
void add(int &a, const int &b) {
  a += b;
  if (a >= mod) a -= mod;
}
int F, W, H;
int correct(int x, int len) {
  if (x == 0) return 1;
  if (x < len * 1ll * (H + 1)) return 0;
  x -= len * 1ll * H;
  return C(x - 1, len - 1);
}
int Calc(int sum, int len) {
  if (sum == 0) return 1;
  if (len == 0) return 0;
  return C(sum - 1, len - 1);
}
int main() {
  first[0] = _f[0] = 1;
  for (int i = 1; i <= (int)5e5; i++) {
    first[i] = 1ll * first[i - 1] * i % mod;
    _f[i] = binpow(first[i], mod - 2);
  }
  int all = 0, ans = 0;
  cin >> F >> W >> H;
  for (int len = 1; len <= (int)5e5; len++) {
    int first = len / 2 + len % 2, second = len / 2;
    if (F >= first && W >= second) {
      add(all, 1ll * Calc(F, first) * Calc(W, second) % mod);
      add(ans, 1ll * Calc(F, first) * correct(W, second) % mod);
    }
    swap(first, second);
    if (F >= first && W >= second) {
      add(all, 1ll * Calc(F, first) * Calc(W, second) % mod);
      add(ans, 1ll * Calc(F, first) * correct(W, second) % mod);
    }
  }
  ans = 1ll * ans * binpow(all, mod - 2) % mod;
  cout << ans;
  return 0;
}
