#include <bits/stdc++.h>
 
typedef long long int ll;
typedef long double ld;
typedef unsigned long long int ull;
typedef long int li;
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); 
#define test ll t; cin >> t; while(t--)
#define print_tc(t, c) cout << "Case #" << t << ": " << c << "\n"; 
const long long int dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0}; 
const long long int cons = 100005, ncr_cons = 2000005;
const long long int MOD = 1000000007; // const long long int MOD = 998244353; 
const long long int const_INT_MAX = 1000000000000000000, const_INT_MIN = -1 * 1000000000000000000;
using namespace std;
bool sortinrev(const pair<ll,ll> &a, const pair<ll,ll> &b){return (a.first > b.first);}
bool sortbysec(const pair<ll,ll> &a, const pair<ll,ll> &b){return (a.second < b.second);}
bool sortbysecinrev(const pair<ll,ll> &a, const pair<ll,ll> &b){return (a.second > b.second);}
ll gcd(ll x, ll y){return (ll)(__gcd(x, y));}   
ll lcm(ll x, ll y){return (ll)((x * y) / gcd(x, y));}
ll mod_expo(ll x, ll y, ll p){  
    if((x + p) % p == 0) return 0; 
    ll res = 1; x = (x + p) % p; 
    while (y > 0){   
        if(y & 1) res = (res*x + p) % p; 
        y = y>>1; x = (x*x + p) % p;  
    }  
    return res;    
}
void usaco(string str = ""){    
    fastio; 
    if(str.size()){
        freopen((str + ".in").c_str(), "r", stdin); 
        freopen((str + ".out").c_str(), "w", stdout);
    }   
}  
ll invnum[ncr_cons], invfac[ncr_cons], fac[ncr_cons]; 
void pre_ncr(){ // add pre_ncr() in main 
    invnum[0] = invnum[1] = invfac[0] = invfac[1] = fac[0] = 1; 
    for(ll i=2;i<ncr_cons;i++){
        invnum[i] = ((invnum[MOD % i] * (MOD - (MOD / i)) + MOD) % MOD);
    }
    for(ll i=2;i<ncr_cons;i++){
        invfac[i] = ((invnum[i] * invfac[i-1] + MOD) % MOD);
    }
    for(ll i=1;i<ncr_cons;i++){
        fac[i] = ((fac[i-1] * i + MOD) % MOD); 
    }
}
ll ncr(ll n, ll r){
    ll ans = ((fac[n] * invfac[r] + MOD) % MOD) * ((invfac[n-r] + MOD) % MOD); 
    ans += MOD; ans %= MOD; return ans;
}
int main(){ 
    usaco();
    pre_ncr(); 
    ll n, m, k; cin >> n >> m >> k; 
    if(n > m + k){
        cout << 0 << "\n"; return 0; 
    }
    ll ans = ncr(n + m, m); 
    if(m + k + 1 <= n + m) ans -= ncr(n + m, m + k + 1); 
    if(ans < 0) ans += MOD; ans %= MOD; cout << ans << "\n"; 
    cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n"; 
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7,N=3e6+5;
vector<ll> fact(N);

inline ll exp(ll x, ll n, ll m = mod) {
    ll r = 1;
    while(n) {
        if(n & 1) r = r * x % m;
        x = x * x % m, n >>= 1;
    }
    return r;
}

ll ncr(int n,int r){
	if(n<r || r<0 || n<0)
		return 0;
	else if(r==0 || (n==r))
		return 1;
	return (((fact[n]*exp(fact[r],mod-2))%mod)*exp(fact[n-r],mod-2))%mod;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,m,k;
    cin>>n>>m>>k;
    if(n>(m+k)){
    	cout<<0<<endl;
    	return 0;
    }
    fact[0]=fact[1]=1;
    for(ll i=2;i<N;i++){
    	fact[i]=(fact[i-1]*i)%mod;
    }
   	cout<<(ncr(n+m,n)+mod-ncr(n+m,n-k-1))%mod;
    return 0;
}