#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define REPR(i, n) for (int i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (int i = m; i < n; ++i)
#define FORR(i, m, n) for (int i = m; i >= n; --i)
#define ALL(v) (v).begin(),(v).end()
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
const ll INF=1LL<<60;
const int inf=(1<<30)-1;
const int mod=1e9+7;
int dx[8]={1,0,-1,0,-1,-1,1,1};
int dy[8]={0,1,0,-1,-1,1,-1,1};
const int nmax=3000005;
ll fac[nmax],finv[nmax],inv[nmax];
void COMinit(){
  fac[0]=fac[1]=1;
  finv[0]=finv[1]=1;
  inv[1]=1;
  for(int i=2;i<nmax;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(int n,int k){
  if(n<k||n<0||k<0){
    return 0;
  }
  return fac[n]*(finv[k]*finv[n-k]%mod)%mod;
}
int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    COMinit();
    ll n,m,k;cin >> n >> m >> k;
    ll ans;
    if(n<=m+k) ans=com(n+m,m)+mod-com(n+m,m+k+1);
    else ans=0;
    ans%=mod;
    cout << ans << endl;
}
#include <iostream>
#include <cmath>
using namespace std;

int main() {
  double x, y, r;
  scanf("%lf %lf %lf", &x, &y, &r);

  long long sr = static_cast<long long>(round(r * 10000)) * static_cast<long long>(round(r * 10000));
  long long ans = 0;
  for (int i = static_cast<int>(ceil(x - r)); i <= static_cast<int>(floor(x + r)); i++) {
    int lower, upper;
    long long dx = i * 10000 - static_cast<int>(round(x * 10000));
    long long sdx = 1LL * dx * dx;

    int left = static_cast<int>(floor(y - r)), right = static_cast<int>(ceil(y));
    while (left < right) {
      int mid = (left + right) >> 1;
      long long dy = mid * 10000 - static_cast<int>(round(y * 10000));
      long long sdy = 1LL * dy * dy;
      if (sdx + sdy > sr)
        left = mid + 1;
      else
        right = mid;
    }
    lower = left;

    left = static_cast<int>(floor(y)), right = static_cast<int>(ceil(y + r));
    while (left < right) {
      int mid = (left + right + 1) >> 1;
      long long dy = mid * 10000 - static_cast<int>(round(y * 10000));
      long long sdy = 1LL * dy * dy;
      if (sdx + sdy > sr)
        right = mid - 1;
      else
        left = mid;
    }
    upper = left;

    if (lower <= upper)
      ans += (upper - lower + 1);
  }

  printf("%lld\n", ans);

  return 0;
}