#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:671088640")
using namespace std;
const int MOD = 1000000007;
const int INF = 20000000;
const long double EPS = 1e-7;
const int HASH_POW = 29;
const long double PI = acos(-1.0);
mt19937_64 rnd(1);
double workTime() { return double(clock()) / CLOCKS_PER_SEC; }
void my_return(int code) { exit(code); }
int bin_pow(int a, int n) {
  int ans = 1;
  while (n) {
    if (n & 1) ans = ans * 1ll * a % MOD;
    n >>= 1;
    a = a * 1ll * a % MOD;
  }
  return ans;
}
int f[100010], rev[100010];
int C(int n, int k) {
  if (k < 0 || k > n) return 0;
  int res = f[n] * 1ll * rev[k] % MOD;
  return res * 1ll * rev[n - k] % MOD;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  f[0] = 1;
  for (int i = 1; i <= 100000; ++i) f[i] = f[i - 1] * 1ll * i % MOD;
  for (int i = 0; i <= 100000; ++i) rev[i] = bin_pow(f[i], MOD - 2);
  int f, w, h;
  scanf("%d %d %d", &f, &w, &h);
  if (w == 0) {
    printf("1\n");
    my_return(0);
  } else if (f == 0) {
    if (w > h) {
      printf("1\n");
      my_return(0);
    } else {
      printf("0\n");
      my_return(0);
    }
  } else if (w <= h) {
    printf("0\n");
    my_return(0);
  }
  int total = 0, good = 0;
  for (int i = 1; i <= w; ++i) {
    if (i > 1) total = (total + C(w - 1, i - 1) * 1ll * C(f - 1, i - 2)) % MOD;
    total = (total + 2ll * C(w - 1, i - 1) * C(f - 1, i - 1)) % MOD;
    total = (total + C(w - 1, i - 1) * 1ll * C(f - 1, i)) % MOD;
  }
  for (int i = 1; i <= w; ++i) {
    if (i * (h + 1) > w) break;
    int w1 = w - i * h;
    if (i > 1) good = (good + C(w1 - 1, i - 1) * 1ll * C(f - 1, i - 2)) % MOD;
    good = (good + 2ll * C(w1 - 1, i - 1) * C(f - 1, i - 1)) % MOD;
    good = (good + C(w1 - 1, i - 1) * 1ll * C(f - 1, i)) % MOD;
  }
  printf("%d\n", good * 1ll * bin_pow(total, MOD - 2) % MOD);
  my_return(0);
}
