#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);
}
// 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;
}