/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author
 */

#include <iostream>
#include <fstream>

#ifndef PRELUDE_H
#define PRELUDE_H

#define M_PI 3.14159265358979323846
#define EPS 1e-9

#include <algorithm>
#include <cmath>
#include <numeric>

#include <vector>
#include <set>
#include <map>
#include <queue>

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

typedef std::pair<int, int> ii;
typedef std::pair<ll, ll> llll;
typedef std::pair<int, ll> ill;
typedef std::pair<double, double> dd;

typedef std::vector<int> vi;
typedef std::vector<ii> vii;
typedef std::vector<vi> vvi;
typedef std::vector<vvi> vvvi;
typedef std::vector<vii> vvii;
typedef std::vector<ill> vill;
typedef std::vector<vill> vvill;

typedef std::vector<bool> vb;

typedef std::vector<char> vc;
typedef std::vector<std::vector<char>> vvc;

typedef std::vector<ll> vll;
typedef std::vector<vll> vvll;
typedef std::vector<llll> vllll;
typedef std::vector<double> vd;
typedef std::vector<dd> vdd;

typedef std::string ss;
typedef std::vector<ss> vss;
typedef std::vector<vss> vvss;

typedef std::set<int> si;
typedef std::set<ii> sii;
typedef std::set<ll> sll;

typedef std::map<int, int> mii;
typedef std::map<char, int> mci;

typedef std::queue<int> qi;

typedef std::vector<std::pair<int, ii>> EdgeList;

#define REP(i,n) for(int i=0;i<n;++i)
#define DEBUG(a) #a << ": " << (a) << " " <<
#define ENDL "\n"
#define REPLL(l,n) for(ll l=0;l<n;++l)
#define FOR(i,s,n) for(int i=s;i<=n;++i)
#define FOREACH(it,a) for(auto it=a.begin(); it != a.end(); ++it)

#endif //PRELUDE_H


class EWhiteAndBlackBalls {
public:
    vll fac, invfac;
    ll mod = 1'000'000'000 + 7;
    std::tuple<ll, ll, ll> extendedEuclid(ll a, ll b) {
        if (b == 0) {
            return {a, 1, 0};
        }
        auto [d, x, y] = extendedEuclid(b, a % b);
        ll x1 = y;
        ll y1 = x - (a / b) * y;
        return {d, x1, y1};
    }

    ll modularInverse(ll a, ll n) {
        auto [d, x, y] = extendedEuclid(a, n);
        return (x + n) % n;
    }
    ll choose (ll n, ll k) {
        if (k > n) {
            return 0;
        }
        return fac[n] * invfac[k] % mod * invfac[n-k] % mod;
    }
    void solve(std::istream& in, std::ostream& out) {
        ll n, m, k;
        in >> n >> m >> k;
        if (n > m + k) {
            out << 0; return;
        }

        fac = vll(n+m+1);
        invfac = vll(n+m+1);
        fac[0] = 1; invfac[0] = 1;
        for(int i = 1; i <= n+m; ++i) {
            fac[i] = i * fac[i-1] % mod;
            invfac[i] = modularInverse(fac[i], mod);
        }
        ll ans = choose(n+m, n) - choose(n+m, m+k+1);
        ans = (ans + mod) % mod;

        out << ans;
    }
};


int main() {
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout << std::fixed;
	std::cout << std::setprecision(15);

	EWhiteAndBlackBalls solver;
	std::istream& in(std::cin);
	std::ostream& out(std::cout);
	solver.solve(in, out);
	return 0;
}

#include <bits/stdc++.h>
#define MAXN  2000005
#define ll long long
#define F first
#define S second
#define MOD 1000000007
#define ll long long

using namespace std;

ll n, m, k;
ll gt[MAXN], inv[MAXN];

ll poW(ll A, ll B)
{
    ll C = 1;

    for(; B; B /= 2, A = (A * A) % MOD)
    {
        if(B % 2) C = (C * A) % MOD;
    }
    return C;
}

ll C(ll A, ll B)
{
    if(B < A) return 0;
    ll res = (((gt[B] * inv[A] ) % MOD ) * inv[B - A] ) % MOD;
    return res;
}

void solve()
{
    cin >> n >> m >> k;
    //if(n < m) swap(n, m);
    if(n > m + k)
    {
        cout << 0;
        return;
    }
    gt[0] = 1;
    for(int i = 1; i <= n + m; ++i)
    {
        gt[i] = (gt[i-1] * i) % MOD;
    }

    inv[n+m] = poW(gt[n + m], MOD - 2);

    for(int i = n + m - 1; i >= 0; --i)
    {
        inv[i] = (inv[i + 1] * (i + 1)) % MOD;
    }

    ll ans = C(m, n + m) % MOD;
    ans = (ans - C(m + k  + 1, n + m)) % MOD;
    if(ans < 0 ) ans += MOD;
    cout << ans;
}

int main()
{
    ios_base :: sync_with_stdio(0);
    cin.tie();
    cout.tie();
    if(fopen(".inp", "r"))
    {
        freopen(".inp", "r", stdin);
        freopen(".out", "w", stdout);
    }
    int t;
    t = 1;
    //cin >> t;
    while(t--)
    {
        //cerr << t << '\n';
        solve();
    }
    return 0;
}
