func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1000000007;   long long fac[300011], inv[300011];   int F, W, H;   long long fastpower(long long v, long long p) {     long long ret = 1;     while (p > 0) {       if (p % 2 == 1) {         ret = ret * v;         ret %= mod;         p--;       } else {         v = v * v;         v %= mod;         p /= 2;       }     }     return ret;   }   void init() {     fac[0] = inv[0] = 1;     for (int i = 1; i < 300011; ++i) {       fac[i] = fac[i - 1] * i;       inv[i] = inv[i - 1] * fastpower(i, mod - 2);       fac[i] %= mod;       inv[i] %= mod;     }   }   long long C(int n, int k) {     if (n < k) return 0;     return ((fac[n] * inv[k]) % mod * inv[n - k]) % mod;   }   long long add(long long v, long long u) { return (v + u) % mod; }   long long cost(long long n, long long k, long long low) {     n = n - k * low;     if (n < 0) return 0;     return C(n + k - 1, n);   }   long long calc(int num, int limit) {     long long v1 = cost(F, num, 1) * cost(W, num, limit) * 2;     long long v2 = cost(F, num, 1) * cost(W, num + 1, limit);     long long v3 = cost(F, num, 1) * cost(W, num - 1, limit);     return add(add(v1, v2), v3);   }   int main() {     init();     scanf( %d%d%d , &F, &W, &H);     H++;     if (W == 0) {       printf( 1 n );       return 0;     }     if (W < H) {       printf( 0 n );       return 0;     }     if (W == 0) {       printf( 1 n );       return 0;     }     if (F == 0) {       printf( 1 n );       return 0;     }     long long ans = 0;     for (int i = 1; i <= F; ++i) {       ans += calc(i, H);       ans %= mod;     }     ans = ans + mod;     ans %= mod;     ans = ans * fastpower(C(W + F, W), mod - 2);     ans = ans % mod;     printf( %I64d n , ans);     return 0;   }   