#include<cstdio>
const int mod(1e9+7);
long long f(int x)
{
	long long res=1;
	for(int i=1;i<=x;i++)
		res=(res*i)%mod;
	return res; 
} 
long long pow(long long x,int p)
{
	long long res=1;
	while(p)
	{
		if(p%2) res=(res*x)%mod;
		p/=2;
		x=(x*x)%mod;
	}
	return res;
}
long long c(int n,int m)
{
	return ((f(n)*pow(f(m),mod-2))%mod*pow(f(n-m),mod-2))%mod;
}
int main()
{
	long long n,m,k;
	scanf("%lld%lld%lld",&n,&m,&k);
	if(n-m>k) printf("0\n");
	else if(n<=k) printf("%lld\n",c(n+m,m));
	else if(n>k) printf("%lld\n",((c(n+m,m)-c(n+m,n-k-1))%mod+mod)%mod);
	return 0;
}
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vii;
typedef vector<vi> vvi;
typedef vector<pll> vll;
typedef vector<vl> vvl;

#define fori(i, n) for (int i = 0; i < n; i++)
#define ford(i, n) for (int i = n - 1; i >= 0; i--)
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define repd(i, a, b) for (int i = a; i >= b; i--)
#define trav(x, a) for (auto &x : a)
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define endl '\n'
#define sz(a) (int)(a).size()
#define fi first
#define se second

clock_t time_p = clock();
void time_taken()
{
    time_p = clock() - time_p;
    cerr << "Time Taken : " << (float)(time_p) / CLOCKS_PER_SEC << "\n";
}

const ll mod = 1e9 + 7;
const ll INF = 1e18;

ll modinv(ll a, ll m)
{
    assert(m > 0);
    if (m == 1)
        return 0;
    a %= m;
    if (a < 0)
        a += m;
    assert(a != 0);
    if (a == 1)
        return 1;
    return m - modinv(m, a) * m / a;
}

template <int MOD_>
struct modnum
{
private:
    int v;

public:
    static const int MOD = MOD_;

    modnum() : v(0) {}
    modnum(ll v_) : v(int(v_ % MOD))
    {
        if (v < 0)
            v += MOD;
    }
    explicit operator int() const { return v; }
    friend bool operator==(const modnum &a, const modnum &b) { return a.v == b.v; }
    friend bool operator!=(const modnum &a, const modnum &b) { return a.v != b.v; }

    modnum operator~() const
    {
        modnum res;
        res.v = modinv(v, MOD);
        return res;
    }

    modnum &operator+=(const modnum &o)
    {
        v += o.v;
        if (v >= MOD)
            v -= MOD;
        return *this;
    }
    modnum &operator-=(const modnum &o)
    {
        v -= o.v;
        if (v < 0)
            v += MOD;
        return *this;
    }
    modnum &operator*=(const modnum &o)
    {
        v = int(ll(v) * ll(o.v) % MOD);
        return *this;
    }
    modnum &operator/=(const modnum &o)
    {
        return *this *= (~o);
    }

    friend modnum operator+(const modnum &a, const modnum &b) { return modnum(a) += b; }
    friend modnum operator-(const modnum &a, const modnum &b) { return modnum(a) -= b; }
    friend modnum operator*(const modnum &a, const modnum &b) { return modnum(a) *= b; }
    friend modnum operator/(const modnum &a, const modnum &b) { return modnum(a) /= b; }
};

using num = modnum<mod>;

vector<num> fact;
vector<num> ifact;

void init()
{
    fact = {1};
    for (int i = 1; i < 2000005; i++)
        fact.push_back(i * fact[i - 1]);
    for (num x : fact)
        ifact.push_back(1 / x);
}

num ncr(int n, int k)
{
    if (k < 0 || k > n)
        return 0;
    return fact[n] * ifact[k] * ifact[n - k];
}

num powmod(num x, int a)
{
    if (a == 0)
        return 1;
    if (a & 1)
        return x * powmod(x, a - 1);
    return powmod(x * x, a / 2);
}

int main()
{
    ios_base::sync_with_stdio(false), cin.tie(nullptr);

    init();

    int n, m, k;
    cin >> n >> m >> k;
    // x1 + x2 + .. + x_{m+1} = n
    // x1 <= k
    // x1 + x2 <= k + 1
    // x1 + x2 + x3 <= k + 2

    // vector<num> dp(n + 1);
    // dp[0] = 1;

    // fori(i, m + 1)
    // {
    //     num sum = 0;
    //     for (int j = 0; j <= min(k + i, n); j++)
    //     {
    //         sum += dp[j];
    //         dp[j] = sum;
    //     }
    // }

    // // w_i - b_i = k+1
    // // w_i + b_i = i

    // // (0,k) -> (w,b+k)

    // cout << int(dp[n]) << endl;

    if (n > m + k)
    {
        cout << 0 << endl;
    }
    else
    {
        cout << int(ncr(n + m, n) - ncr(n + m, n - (k + 1))) << endl;
    }
    // cout << int(ncr(2 * n, n) / (n + 1)) << endl;

    return 0;
}