#include<bits/stdc++.h>
using namespace std;
#define FastIO ios_base::sync_with_stdio(false); cin.tie(0);
#define ll long long
#define ull unsigned long long
#define pb push_back
#define All(x) (x).begin(),(x).end()
#define mp make_pair
#define nl "\n"
typedef pair<int,int>ii;
typedef vector<int>vi;
typedef vector<ii>vii;
typedef vector<vi>vvi;
typedef vector<long long>vl;
typedef vector <vl>vvl;
template<class T>
void print(T& a)
{
    for(auto x:a)
        cout<<x<<" ";
    cout<<"\n";
}

const ll MOD=1e9+7;
ll bnp(ll n, ll p)
{
    ll res=1;
    while(p)
    {
        if(p&1)res=res*n%MOD;
        n=n*n%MOD;
        p>>=1;
    }
    if(res<0)res+=MOD;
    return res;
}

const ll MX=2e6+5;
ll fact[MX],inv[MX];

void fac()
{
    fact[0]=fact[1]=inv[0]=inv[1]=1;
    for(ll i=2; i<MX; i++)
    {
        fact[i]=fact[i-1]*i%MOD;
        inv[i]=bnp(fact[i],MOD-2);
    }
}

int main()
{

    FastIO
    fac();

    ll n,m,k; cin>>n>>m>>k;
    ll ans,tem;

    if(n>m+k)
    {
        cout<<0<<nl;
        return 0;
    }

    ans=1ll*fact[n+m]*inv[m]%MOD*inv[n]%MOD;
    if(n-k-1>=0)
    {
        tem=1ll*fact[n+m]*inv[m+k+1]%MOD;
        tem=1ll*tem*inv[n-k-1]%MOD;
        ans=(ans-tem)%MOD;
    }

    if(ans<0)ans+=MOD;
    cout<<ans<<nl;

    return 0;
} 
#include <bits/stdc++.h> 
using namespace std;
std::chrono::high_resolution_clock::time_point start_time = std::chrono::high_resolution_clock::now();
// Defines
#define all(x) (x).begin(),(x).end()
#define sortall(x) sort(x.begin(),x.end())
#define maxin(x) *max_element(x.begin(),x.end())        
#define minin(x) *min_element(x.begin(),x.end())
#define lint long long int                              
#define nl '\n'
#define INF (lint)1e18
#define EPS (long double)1/(INF)
//#define MOD (lint)998244353
#define MOD (lint)(1e9+7)
//Debugs
#ifdef LOCAL  
    #define debugvar(x) cout<<#x<<"\t:"<<(x)<<"\n"
    #define debugvec(x) cout<<#x<<"\t:"; for(auto it = (x).begin();it!=(x).end();it++) cout<<*it<<" "; cout<<nl
#else
    #define debugvar(x) 0
    #define debugvec(x) 0
#endif
//Templates
template <typename T> inline T gcd(T a, T b) { a=(a>0?a:-a); b=(b>0?b:-b); while (b != 0) swap(b, a %= b); return a;} 
template <typename T> inline T extended_gcd(T a, T& x, T b, T& y){  // returns gcd(a,b) && a*x + b*y = gcd(a,b)
    T l_a = 1, l_b = 0;
    T r_a = 0, r_b = 1;
    T q = a/b, r = a%b;
    while(r>0){
        T temp;
        temp = r_a, r_a = l_a - q*r_a ,l_a = temp;
        temp = r_b, r_b = l_b - q*r_b ,l_b = temp;
        a = b;
        b = r;
        q = a/b;
        r = a%b;
    }
    x = r_a;
    y = r_b;
    return b;
}
template <typename T> inline T MOD_inv (T num){
    lint inv,temp;
    assert(extended_gcd(MOD,temp,num,inv)==1);
    return (inv%MOD+MOD)%MOD;
}
template <typename T> inline T lcm(T a, T b) { if(a*b==0) return (T)0; return ((a/gcd(a,b))*b);}
template <typename T> inline T getpow(T base, T exp){
    if(exp==0) return (T)1;
    T half  = getpow(base,exp/2); 
    T ans   = half*half; 
    if(exp&1) ans = ans*base;
    return ans;
}
template <typename T> inline T getpowMOD(T base, T exp){
    if(exp==0) return (T)1;
    base    = base%MOD;
    T half  = getpowMOD(base,exp/2);
    T ans   = (half*half)%MOD;
    if(exp&1) ans = (ans*base)%MOD;
    return ans;
}
lint ncrMOD(lint n, lint r){
    if(r>n) return 0;
    r = min(r,n-r);
    lint fact = 1;
    for(lint i=1;i<=r;i++){
        fact=(fact*(n+1-i))%MOD;
        fact=(fact*MOD_inv(i))%MOD;
    }
    return fact;
}
void solve(){
    lint n,m,k;
    cin>>n>>m>>k;
    if(m-n<-k){cout<<0;return;}
    lint ans = ncrMOD(m+n,m)-ncrMOD(m+n,m+k+1);
    ans = (ans+MOD)%MOD;
    cout<<ans;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);lint testnum=1,totalnum=1;
    //cin>>totalnum;
    for(testnum=1;testnum<=totalnum;++testnum){
        //cout<<"Case #"<<testnum<<": ";
        //cout<<ncrMOD(28,14);
        solve();
        cout<<nl;
    }
    bool time = 0;
    //time=true;
    if(time){
        std::chrono::high_resolution_clock::time_point end_time = std::chrono::high_resolution_clock::now();
        std::chrono::duration<double> time_taken = std::chrono::duration_cast<std::chrono::duration<double>>(end_time - start_time);
        cout << "\nTime Taken: " <<setprecision(10)<<time_taken.count() << " s";
    }
return 0;
}
/*
    created on: 27.06.2021                                                                 
    


*/

