#include <bits/stdc++.h>
using namespace std;
const int MOD = 1E9 + 7;
int Add(int a, int b, int m = MOD) {
  a += b;
  if (a >= m) a -= m;
  return a;
}
int Sub(int a, int b, int m = MOD) {
  a -= b;
  if (a < 0) a += m;
  return a;
}
int AddTo(int& to, int w, int m = MOD) {
  to += w;
  if (to >= m) to -= m;
  return to;
}
int SubTo(int& to, int w, int m = MOD) {
  to -= w;
  if (to < 0) to += m;
  return to;
}
int Mult(int a, int b, int m = MOD) { return (a * 1LL * b) % m; }
int Pow(int a, long long deg, int m = MOD) {
  int res = 1 % m;
  for (; deg > 0; deg >>= 1, a = Mult(a, a, m))
    if (deg & 1) res = Mult(res, a, m);
  return res;
}
int Oem(int to, int m = MOD) { return Pow(to, m - 2, m); }
int Div(int a, int b, int m = MOD) { return Mult(a, Oem(b, m), m); }
const int MAXN = 300010;
int fact[MAXN];
int dfact[MAXN];
int Comb(int n, int k) { return Mult(fact[n], Mult(dfact[k], dfact[n - k])); }
int CombP(int n, int k) { return Comb(n + k - 1, k - 1); }
int Eval(long long how, long long len, long long lo) {
  if (len == 0) {
    if (how == 0) return 1;
    return 0;
  }
  how -= len * lo;
  if (how < 0) return 0;
  return CombP(how, len);
}
int main() {
  long long f, w, h;
  cin >> f >> w >> h;
  fact[0] = 1;
  for (int i = 1; i < MAXN; ++i) fact[i] = Mult(i, fact[i - 1]);
  for (int i = 0; i < MAXN; ++i) dfact[i] = Oem(fact[i]);
  int tot = 0, good = 0;
  for (int l = 1; l < MAXN; ++l)
    for (int t = 0; t < 2; ++t) {
      int cf = l >> 1, cw = l - cf;
      if (t == 1) swap(cf, cw);
      AddTo(tot, Mult(Eval(f, cf, 1), Eval(w, cw, 1)));
      AddTo(good, Mult(Eval(f, cf, 1), Eval(w, cw, h + 1)));
    }
  if (tot != 0) tot = Oem(tot);
  int ans = Mult(good, tot);
  printf("%d\n", ans);
  return 0;
}
