#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
#include<ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;

#define forn(i,x1,n)     for(int i=x1; i<n; i++)
#define forit(it, m)    for(decltype(m)::iterator it = m.begin(); it!=m.end(); ++it)
#define ff              first
#define ss              second
#define int             long long
#define pb              push_back
#define mp              make_pair
#define pii             pair<int,int>
#define vi              vector<int>
#define mii             map<int,int>
#define pqb             priority_queue<int>
#define pqs             priority_queue<int,vi,greater<int> >
#define setbits(x1)      __builtin_popcountll(x1)
#define zrobits(x1)      __builtin_ctzll(x1)
#define mod             1000000007
// #define mod             998244353
#define inf             1e18
#define ps(x1,y)         fixed<<setprecision(y)<<x1
#define mk(arr,n,type)  type *arr=new type[n];
#define w(x1)            int x1; cin>>x1; while(x1--)
mt19937                 rng(chrono::steady_clock::now().time_since_epoch().count());


void zeus()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
}

int maxi = 2000001;
int fac[2000001];

int fast_pow(long long base, long long n, long long M)
{
	if (n == 0)
		return 1;
	if (n == 1)
		return base;
	long long halfn = fast_pow(base, n / 2, M);
	if (n % 2 == 0)
		return ( halfn * halfn ) % M;
	else
		return ( ( ( halfn * halfn ) % M ) * base ) % M;
}
int findMMI_fermat(int n, int M)
{
	//only for prime
	return fast_pow(n, M - 2, M);
}

int nCr(int n, int r, int M) { //For small n,r use GCD technique, find on GFG

	int ans = (fac[n] * findMMI_fermat(fac[n - r], M) % M) * findMMI_fermat(fac[r], M);
	ans = ans % M;

	return ans;
}
int32_t main() {

	zeus();
	fac[0] = 1;

	forn(i, 1, maxi) {
		fac[i] = fac[i - 1] * i;
		fac[i] %= mod;
	}
	int n, m, k; cin >> n >> m >> k;

	if (n > m + k) {
		cout << 0 << endl;
	}
	else if (k > n) {
		cout << nCr(n + m, m, mod);
	}
	else {
		cout << (nCr(n + m, m, mod) - nCr(n + m, m + k + 1, mod) + mod) % mod << endl;
	}



}
#include<bits/stdc++.h>
#define LL long long
using namespace std;

const int mn=2e6+6,mod=1e9+7;
int n,m,k;
LL fac[mn],inv[mn];

LL qpow(LL a,LL b) {LL ans=1;while(b) {if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}

void init()
{
    fac[0]=inv[0]=1;
    for(int i=1;i<mn;++i) fac[i]=fac[i-1]*i%mod;
    inv[mn-1]=qpow(fac[mn-1],mod-2);
    for(int i=mn-2;i;--i) inv[i]=inv[i+1]*(i+1)%mod;
}

LL C(int n,int m)
{
    if(m>n) return 0;
    return (fac[n]*inv[m]%mod)*inv[n-m]%mod;
}

int main()
{
    init();
    cin>>n>>m>>k;
    if(n>m+k) {puts("0");return 0;}
    cout<<(C(n+m,n)+mod-C(n+m,m+k+1))%mod;
}