/*  -*- coding: utf-8 -*-
 *
 * e.cc: E - White and Black Balls
 */

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<deque>
#include<algorithm>
#include<numeric>
#include<utility>
#include<complex>
#include<functional>
 
using namespace std;

/* constant */

const int MAX_N = 1000000;
const int MAX_M = 1000000;
const int MOD = 1000000007;

/* typedef */

typedef long long ll;

/* global variables */

int fs[MAX_N + MAX_M + 1], invfs[MAX_N + MAX_M + 1];

/* subroutines */

int powmod(int a, int n) {  // a^n % MOD
  int pm = 1;
  while (n > 0) {
    if (n & 1) pm = (ll)pm * a % MOD;
    a = (ll)a * a % MOD;
    n >>= 1;
  }
  return pm;
}

inline int nck(int n, int k) {  // nCk % MOD
  if (n < k || k < 0) return 0;
  return (ll)fs[n] * invfs[n - k] % MOD * invfs[k] % MOD;
}

void prepare_fracs(int n) {
  fs[0] = invfs[0] = 1;
  for (int i = 1; i <= n; i++) {
    fs[i] = (ll)fs[i - 1] * i % MOD;
    invfs[i] = powmod(fs[i], MOD - 2);
  }
}

/* main */

int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);

  if (n > m + k) { puts("0"); return 0; }

  prepare_fracs(n + m);

  int a = (nck(n + m, n) + MOD - nck(n + m, m + k + 1)) % MOD;
  printf("%d\n", a);
  return 0;
}

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

#define rep(i,a,b) for(int i = (a); i < (b); i++)
#define per(i,a,b) for(int i = (a); i > (b); i--)
#define repl(i,a,b) for(ll i = (a); i < (b); i++)
#define perl(i,a,b) for(ll i = (a); i > (b); i--)

const ll MOD = 1000000007;
int _max = 2000000;
vector<ll> fact(_max+1), factinv(_max+1);

//Fast modular exponentiation
long long fast_exp(long long base, long long exp, long long mod) {
    long long res=1;
    while(exp>0) {
       if(exp%2==1) res=(res*base)%mod;
       base=(base*base)%mod;
       exp/=2;
    }
    return res%mod;
}
int n, m;
void precompute(){
        _max = n+m;
        fact[0] = 1;
        for(int i = 1; i <= _max; i++){
                fact[i] = (fact[i-1]*i)%MOD;
        }
        for(int i = 0; i <= _max; i++){
                factinv[i] = fast_exp(fact[i], MOD-2, MOD);
        }
}

void solve(){
    int k;
    cin >> n >> m >> k;
    precompute();
    if(n-k-1 >= m){
            cout << 0 << "\n";
    }
    else{
            ll total = (((fact[n+m]*factinv[n])%MOD)*factinv[m])%MOD;
            //cout << total << "\n";
            if(n == k){
                    cout << total << "\n";
            }
            else{
                    ll bad = (((fact[n+m]*factinv[n-k-1])%MOD)*factinv[m+k+1])%MOD;
                    ll ans = total - bad;
                    if(ans < 0) ans += MOD;
                    cout << ans << "\n";
            }
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t;
    precompute();
    //ll t;
    //cin >> t;
    t = 1;
    while(t--)solve();
    return 0;
}