#include <bits/stdc++.h>
using namespace std;
const int maxN = 100002, mod = 1000000007;
int A[maxN], B[maxN];
void incr_mod(int& a, int b) { a = (a + b) % mod; }
void mult_mod(int& a, int b) { a = (long long)a * b % mod; }
pair<long long, long long> ext_euc(long long a, long long b) {
  if (b == 0) return make_pair(1, 0);
  pair<long long, long long> temp = ext_euc(b, a % b);
  return make_pair(temp.second, (temp.first - a / b * temp.second) % mod);
}
long long mod_inv(int a) {
  pair<long long, long long> temp = ext_euc(a, mod);
  return (temp.first + mod) % mod;
}
int sym_new(int n, int k) {
  if (k < 0 or k > n) return 0;
  int res = A[n];
  mult_mod(res, B[k]);
  mult_mod(res, B[n - k]);
  return res;
}
int main() {
  A[0] = B[0] = 1;
  for (int i = 1; i < maxN; i++) {
    A[i] = A[i - 1];
    mult_mod(A[i], i);
    B[i] = mod_inv(A[i]);
  }
  int f, w, h;
  scanf("%d%d%d", &w, &f, &h);
  if (w == 0) {
    printf("%d\n", (h < f ? 1 : 0));
    return 0;
  }
  if (f == 0) {
    printf("1\n");
    return 0;
  }
  int p = 0;
  for (int i = 1; i <= f; i++) {
    if (f < h * i + 1) break;
    int temp = sym_new(f - h * i - 1, i - 1);
    mult_mod(temp, sym_new(w + 1, i));
    incr_mod(p, temp);
  }
  int q = 0;
  for (int i = 1; i <= f; i++) {
    int temp = sym_new(f - 1, i - 1);
    mult_mod(temp, sym_new(w + 1, i));
    incr_mod(q, temp);
  }
  mult_mod(p, mod_inv(q));
  printf("%d\n", p);
  return 0;
}
