#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

#define rep(i,a,b) for(int i = (a); i < (b); i++)
#define per(i,a,b) for(int i = (a); i > (b); i--)
#define repl(i,a,b) for(ll i = (a); i < (b); i++)
#define perl(i,a,b) for(ll i = (a); i > (b); i--)

const ll MOD = 1000000007;
const int _max = 2000000;
vector<ll> fact(_max+1), factinv(_max+1);

//Fast modular exponentiation
long long fast_exp(long long base, long long exp, long long mod) {
    long long res=1;
    while(exp>0) {
       if(exp%2==1) res=(res*base)%mod;
       base=(base*base)%mod;
       exp/=2;
    }
    return res%mod;
}

void precompute(){
        fact[0] = 1;
        for(int i = 1; i <= _max; i++){
                fact[i] = (fact[i-1]*i)%MOD;
        }
        for(int i = 0; i <= _max; i++){
                factinv[i] = fast_exp(fact[i], MOD-2, MOD);
        }
}

void solve(){
    int n, m, k;
    cin >> n >> m >> k;
    if(n-k-1 >= m){
            cout << 0 << "\n";
    }
    else{
            ll total = (((fact[n+m]*factinv[n])%MOD)*factinv[m])%MOD;
            //cout << total << "\n";
            if(n == k){
                    cout << total << "\n";
            }
            else{
                    ll bad = (((fact[n+m]*factinv[n-k-1])%MOD)*factinv[m+k+1])%MOD;
                    ll ans = total - bad;
                    if(ans < 0) ans += MOD;
                    cout << ans << "\n";
            }
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t;
    precompute();
    //ll t;
    //cin >> t;
    t = 1;
    while(t--)solve();
    return 0;
}
#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "string"
#include "map"
#include "unordered_map"
#include "unordered_set"
#include "iomanip"
#include "cmath"
#include "random"
#include "bitset"
#include "cstdio"
#include "numeric"
#include "cassert"
#include "ctime"

using namespace std;

constexpr long long int MOD = 1000000007;
//constexpr int MOD = 1000000007;
//constexpr int MOD = 998244353;
//constexpr long long int MOD = 998244353;
constexpr double EPS = 1e-12;

//int N, M, K, T, H, W, L, R;
long long int N, M, K, T, H, W, L, R;

long long int power(long long int x, long long int n, long long int M) {
	long long int ret = 1;
	long long int by = x;
	while (n) {
		if (n & 1) {
			ret *= by;
			ret %= M;
		}
		by *= by;
		by %= M;
		n >>= 1;
	}
	return ret;
}

long long by[2222222];
long long inv[2222222];

long long ncr(long long n, long long r) {
	if (r<0 || r>n)return 0;
	return by[n] * inv[n - r] % MOD * inv[r] % MOD;
}

void Solve(int a, int b, int c) {
	long long ans = ncr(a + b, a);
	ans += MOD - ncr(a + b, a - (c + 1));
	ans %= MOD;
	cout << ans << endl;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	by[0] = by[1] = inv[0] = inv[1] = 1;
	for (int i = 2; i < 2222222; i++) {
		by[i] = by[i - 1] * i % MOD;
	}
	inv[2222221] = power(by[2222221], MOD - 2, MOD);
	for (int i = 2222220; i > 0; i--) {
		inv[i] = inv[i + 1] * (i + 1) % MOD;
	}
	cin >> N >> M >> K;
	if (N - M > K) {
		cout << 0 << endl;
		return 0;
	}
	Solve(N, M, K);
}