#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll MOD = 1e9+7;
const ll MAXN = 5e6;

ll n, m, k;

ll fac[MAXN];
void init_fac() {
    fac[0] = 1;
    for (ll i = 1; i < MAXN; i++) 
        fac[i] = fac[i-1] * i % MOD;
}

ll modpow(ll n, ll x) {
    ll res = 1;
    while (x) {
        if (x & 1) res = (res * n) % MOD;
        x >>= 1, n = (n * n) % MOD;
    }
    return res;
}

ll modinv(ll n) { return modpow(n, MOD-2); }

ll comb(ll n, ll r) {
    return fac[n] * modinv(fac[r] * fac[n - r] % MOD) % MOD;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    init_fac();
    cin >> n >> m >> k;
    if (n > m+k)
        cout << 0 << '\n';
    else
        cout << (MOD + comb(n+m, n) - comb(n+m, m+k+1)) % MOD << '\n';
    return 0;
}
// #pragma GCC optimize ("O3")
// #pragma GCC target ("sse4")
#include <bits/stdc++.h>
using namespace std;

// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;

#define int long long int

#define vi vector<int>

#define ff first
#define ss second

#define pb push_back
#define MOD 1000000007
//const int nax = 1e6+5;
#define inf 4e18
#define Graph vector<vi>
#define Graphw vector<vector<pair<int,int>>> 
#define sz(x) (int)x.size()
#define pr pair<int,int>

#define display(v) for(int i =0;i<(int)v.size();++i)cout << v[i] << " "
#define all(v) v.begin(),v.end()
#define read(a) for(int i = 0;i<(int)a.size();++i)cin>>a[i]
#define show(x) cout << #x << " is " << x << "\n";
// typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>   ind_si;
// typedef tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>   ind_msi;
#define show_arr(a) cout << #a << "\n"; display(a) ; cout << "\n";
inline int add(int a, int b){ int c = (a%MOD) + (b%MOD); if(c >= MOD) c -= MOD; return c; }
inline int mul(int a, int b){ return ((a%MOD) * 1ll * (b%MOD)) % MOD; }
inline int sub(int a, int b){ int c = (a%MOD) - (b%MOD); if(c < 0) c += MOD; return c; }
inline int sum_till(int n) { return mul(mul(n, n + 1), (MOD + 1) / 2); }
const int nax = 2000*1000 + 10;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

//#define ook order_of_key
//#define fbo find_by_order
//   order_of_key(x) -> number of elements less than x.
// * find_by_order(x) -> gives the element at index x (0 - indexing)

int fac[nax] , faci[nax];

int mod_inv(int a, int n){
    int res = 1LL;
    while(n > 0){
        if(n&1){
            res = mul(res , a);
            --n;
        }
        a = mul(a , a);
        n/=2;
    }
    return res;
}

void pre(){
    fac[0] = fac[1] = 1LL;
    faci[0] = faci[1] = 1LL;
    for(int i  = 2;i<nax;++i){
        fac[i] = mul(i , fac[i - 1]);
        faci[i] = mod_inv(fac[i] , MOD - 2);
    }
}

int ncrm(int n, int r){
   if(n==r || r==0){
       return 1LL;
   }
   if(n<r){
       return 0LL;
   }
   return mul(fac[n],mul(faci[r],faci[n-r]));
}


void test_case();
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    pre();
    int t = 1; //cin>>t;
    while(t--){
        test_case();
    }
    return 0;
}

void test_case(){
    int n, m, k; cin>>n>>m>>k;
    if(n > m + k){
        cout << 0 << '\n';
    }
    else{
        int ans = sub(ncrm(n + m, n), ncrm(n + m, m + k + 1));
        cout << ans%MOD;
    }
}    

// Химаншу
// check overflow
// special case n == 1
// 🍪🍪🍪
    

