#include <bits/stdc++.h>
using namespace std;
long long readi() {
  long long input = 0;
  char c = ' ';
  while (c < '-') {
    c = getchar();
  }
  bool negative = false;
  if (c == '-') {
    negative = true;
    c = getchar();
  }
  while (c >= '0') {
    input = 10 * input + (c - '0');
    c = getchar();
  }
  if (negative) {
    input = -input;
  }
  return input;
}
string reads() {
  string input = "";
  char c = ' ';
  while (c <= ' ') {
    c = getchar();
  }
  while (c > ' ') {
    input += c;
    c = getchar();
  }
  return input;
}
void printi(long long output) {
  if (output == 0) {
    putchar('0');
    return;
  }
  if (output < 0) {
    putchar('-');
    output = -output;
  }
  vector<char> vout;
  while (output) {
    vout.push_back((output % 10) + '0');
    output /= 10;
  }
  for (int i = vout.size() - 1; i >= 0; i--) {
    putchar(vout[i]);
  }
  return;
}
void prints(string output) {
  for (int i = 0; i < output.length(); i++) {
    putchar(output[i]);
  }
  return;
}
long long F, W, H;
long long fact[300010], ifact[300010];
long long num, denom;
long long add(long long a, long long b) { return (a + b) % 1000000007; }
long long mul(long long a, long long b) {
  a %= 1000000007;
  b %= 1000000007;
  return (a * b) % 1000000007;
}
long long getpow(long long a, long long b) {
  if (b == 0) {
    return 1ll;
  }
  if (b == 1) {
    return a;
  }
  long long was = getpow(a, b / 2);
  if (b % 2) {
    return mul(mul(was, was), a);
  }
  return mul(was, was);
}
long long getinv(long long a) { return getpow(a, 1000000007 - 2); }
long long choose(long long a, long long b) {
  if (a < 0 || b < 0 || a < b) {
    return 0ll;
  }
  return mul(fact[a], mul(ifact[b], ifact[a - b]));
}
int32_t main() {
  cout << fixed << setprecision(10);
  ios_base::sync_with_stdio(false);
  if (fopen("cf768f.in", "r")) {
    freopen("cf768f.in", "r", stdin);
    freopen("cf768f.out", "w", stdout);
  }
  cin >> F >> W >> H;
  H++;
  if (W == 0) {
    cout << "1\n";
    return 0;
  }
  if (W < H) {
    cout << "0\n";
    return 0;
  }
  if (F == 0) {
    cout << "1\n";
    return 0;
  }
  fact[0] = 1;
  ifact[0] = 1;
  for (int i = 1; i < 300010; i++) {
    fact[i] = mul(fact[i - 1], i);
    ifact[i] = getinv(fact[i]);
  }
  denom = choose(F + W, W);
  for (long long i = 1; i <= W; i++) {
    long long w = choose(W - H * i + i - 1, W - H * i);
    long long fb = choose(F - 1, F - i + 1) + 2 * choose(F - 1, F - i) +
                   choose(F - 1, F - i - 1);
    num = add(num, mul(w, fb));
  }
  cout << mul(num, getinv(denom)) << '\n';
  return 0;
}
