#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
template <class T, class U>
inline void Max(T &a, U b) {
  if (a < b) a = b;
}
template <class T, class U>
inline void Min(T &a, U b) {
  if (a > b) a = b;
}
inline void add(int &a, int b) {
  a += b;
  while (a >= 1000000007) a -= 1000000007;
}
int pow(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = ans * (long long)a % 1000000007;
    a = (long long)a * a % 1000000007;
    b >>= 1;
  }
  return ans;
}
int f[200010], inv[200010];
int C(int a, int b) {
  return 1LL * f[a] * inv[b] % 1000000007 * inv[a - b] % 1000000007;
}
int main() {
  int T, i, j, k, ca = 0, K = 0, n, m;
  int a, b, h;
  scanf("%d%d%d", &a, &b, &h), h++;
  if (b == 0) {
    puts("1");
    return 0;
  }
  if (a == 0) {
    puts(h <= b ? "1" : "0");
    return 0;
  }
  f[0] = 1;
  for (int i = 1; i < 200010; i++) f[i] = f[i - 1] * (long long)i % 1000000007;
  inv[200010 - 1] = pow(f[200010 - 1], 1000000007 - 2);
  for (int i = 200010 - 1 - 1; i >= 0; i--)
    inv[i] = inv[i + 1] * (long long)(i + 1) % 1000000007;
  K = b / h;
  long long ans = 0, res = 0;
  for (int i = 1; i < K + 1; i++) {
    for (int j = i - 1; j < i + 2; j++) {
      if (j == 0 && a || j > a) continue;
      int first = b - h * i, second = a - j;
      int w = 1LL * C(first + i - 1, first) * C(j + second - 1, second) %
              1000000007;
      if (j == i)
        ans += 2 * w;
      else
        ans += w;
    }
  }
  for (int i = 1; i < b + 1; i++) {
    for (int j = i - 1; j < i + 2; j++) {
      if (j == 0 && a || j > a) continue;
      int first = b - i, second = a - j;
      int w = 1LL * C(first + i - 1, first) * C(j + second - 1, second) %
              1000000007;
      if (j == i)
        res += 2 * w;
      else
        res += w;
    }
  }
  ans %= 1000000007;
  res %= 1000000007;
  ans = ans * pow((int)res, 1000000007 - 2) % 1000000007;
  printf("%d\n", (int)ans);
  return 0;
}
