#include<bits/stdc++.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);
#define int long long
#define ld long double
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rep(i,x,y) for(int i=x; i<y; i++)
#define fill(a,b) memset(a,b,sizeof(a))
#define vi vector<int>
#define vii vector<pair<int,int>>
#define setbits(x) __builtin_popcountll(x)
#define w(x)  int x; cin>>x; while(x--)
#define in(a) for(auto &x: a)cin>>x;
#define out(a) for(auto x: a){cout<<x<<' ';}cout<<'\n';
#define inf 1000000000
void print(bool n){if(n)cout<<"YES";else cout<<"NO";cout<<'\n';}
//1000000007 998244353
const int MOD = 1000000007;

int add(int x, int y){
    x += y;
    while(x >= MOD)
        x -= MOD;
    while(x < 0)
        x += MOD;
    return x;                         
}

int sub(int x, int y){
    return add(x, MOD - y);
}

int mul(int x, int y){
    return (x * 1ll * y) % MOD;
}

int binpow(int x, int y){
    int z = 1;
    while(y > 0)
    {
        if(y % 2 == 1)
            z = mul(z, x);
        x = mul(x, x);
        y /= 2;
    }
    return z;
}

int inv(int x){
    return binpow(x, MOD - 2);   
}

int divide(int x, int y){
    return mul(x, inv(y));
}

int fact[2000005];

int c(int n,int m){
	//cout<<n+m<<' '<<fact[n+m]<<' '<<mul(fact[n],fact[m])<<'\n';
	return divide(fact[n],mul(fact[n-m],fact[m]));
}
signed main(){
	int n,m,k;
	cin>>n>>m>>k;
	if(n>m+k){cout<<0<<'\n';return 0;}
	fact[0]=1;
	rep(i,1,2000005)fact[i]=mul(i,fact[i-1]);
	//cout<<fact[5]<<'\n';
	// cout<<c(n+m,n);
	// cout<<' '<<c(n+m,m+k+1)<<'\n';
	cout<<sub(c(n+m,n),c(n+m,m+k+1))<<'\n';
	return 0;
}
// Problem: E - White and Black Balls
// Contest: AtCoder - AtCoder Beginner Contest 205
// URL: https://atcoder.jp/contests/abc205/tasks/abc205_e
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

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

#define SPEED ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define int long long
#define endl '\n'
#define vi vector<int>
#define pii pair<int, int>
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define fill(a,b) memset(a, b, sizeof(a))
#define setbits(x) __builtin_popcountll(x) //count number of 1
#define zrobits(x) __builitin_ctzll(x)     //count number of zero before 1st 1 ex- (110000)2 ->4

const int inf=0x3f3f3f3f3f3f3f3f, mod = 1e9 + 7;
int dx[]={0,1,1,1,0,-1,-1,-1};
int dy[]={1,1,0,-1,-1,-1,0,1};

// <--------------------Code Begins Here-------------------->
const int N = 2e6 + 1;
int a[N];
int power(int a, int b, int p){
	int res = 1;
	while(b != 0) {
		if(b & 1)
		  res = (res % p * a % p) % p;
		a = (a%p * a%p)%p;
		b /= 2;
	}
	return res%p;
}
int fact[N],inv[N];
void pre(int p) {
    fact[0]=1;
    inv[0]=1;
    for(int i=1;i<N;i++)
        fact[i]=(i*fact[i-1])%p;
    for(int i=1;i<N;i++)
        inv[i]=power(fact[i], p - 2, p);
}
int nCr(int n, int r, int p) { 
    if(r>n)
       return 0;
    if(n==r)
       return 1;
    if(r==0)
       return 1; 
    return (((fact[n]*inv[r]) % p )*inv[n-r])%p;
}  
int32_t main() {
	SPEED;
	int t = 1;
	// cin>>t;
	pre(mod);
	while(t--) {
		int n, m, k;
		cin>>n>>m>>k;
		if(n > (m + k)) {
			cout<<0;
			return 0;
		}
		int ans = nCr(n + m, n, mod);
		ans -= nCr(n + m, m + k + 1, mod);
		ans %= mod;
		if(ans < 0)ans += mod;
		cout<<ans;
	}
	return 0;
}