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

#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define FOR(i, a, b) for(int i = a, _b = b; i <= _b; ++i) 
#define FORD(i, a, b) for(int i = a, _b = b; i >= _b; --i)
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define MASK(i) (1ll<<(i))
typedef int64_t ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<int, int> ii;

/***End of Template***/
int n, m, k;
const int N = 2e6+5;
int fact[N];
const int MOD = 1e9+7;

int modPow(int a, int b) {
	if (b == 0) return 1;
	int half = modPow(a, b/2);
	if (b&1) return (1LL*a*(1LL*half*half%MOD) % MOD);
	else return 1LL*half*half%MOD;
}

int inv(int a) {return modPow(a, MOD-2);}

int C(int n, int k) {
	if (n < k) return 0;
	return 1LL * fact[n] * inv(1LL * fact[k] * fact[n-k] % MOD) % MOD; 
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    fact[0] = 1;
    FOR(i, 1, N-1) fact[i] = 1LL*fact[i-1]*i % MOD;
    scanf("%d%d%d", &n, &m, &k);
   	int ans = (n <= m+k) ? (C(m+n, m) - C(m+n, m+k+1) + MOD) % MOD : 0;
   	printf("%d", ans);
    return 0;
}
#include <bits/stdc++.h>

#define ll long long
#define ull unsigned long long

const ll MOD = 1000000007;
const ll MAX = 2000010;
ll fac[MAX], finv[MAX], inv[MAX];
void COMinit() {
	fac[0] = fac[1] = 1;
	finv[0] = finv[1] = 1;
	inv[1] = 1;
	for (ll i = 2; i < MAX; i++) {
		fac[i] = fac[i - 1] * i % MOD;
		inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
		finv[i] = finv[i - 1] * inv[i] % MOD;
	}
}

ll COM(ll n, ll k) {
	if (n < k) return 0;
	if (n < 0 || k < 0) return 0;
	return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}

using namespace std;

int main() {
	ll N, M, K;
	cin >> N >> M >> K;

	COMinit();

	if (N > M + K) {
		cout << 0 << "\n";
		return 0;
	}

	ll ans = (COM(N+M, N) + MOD - COM(N+M, M+K+1)) % MOD;

	cout << ans << "\n";

	return 0;
}
