#include <bits/stdc++.h>
using namespace std;
long long fact[200050];
long long expo(long long base, long long exp) {
  if (!exp) return 1;
  long long res = expo(base, exp >> 1);
  res *= res;
  res %= 1000000007;
  if (exp & 1) return ((res * base) % 1000000007);
  return res;
}
long long C(long long n, long long r) {
  if (r > n || (r < 0)) return 0;
  if (n == r) return 1;
  if (!r) return 1;
  return (
      ((expo((fact[n - r] * fact[r]) % 1000000007, 1000000007 - 2)) * fact[n]) %
      1000000007);
}
int main() {
  int n, m, g, start = 0;
  scanf("%d%d%d", &n, &m, &g);
  if (n + m <= 2) {
    if (!n)
      if ((m == 1 && g) || (m == 2 && (!g)))
        printf("1");
      else
        printf("0");
    else if (n == 1)
      if ((!g) && m)
        printf("2");
      else if ((!g) && (!m))
        printf("1");
      else
        printf("0");
    else if (g)
      printf("1");
    else
      printf("0");
    return 0;
  }
  fact[0] = fact[1] = 1;
  for (long long i = 2; i < n + m + 1; ++i) {
    fact[i] = fact[i - 1] * i;
    fact[i] %= 1000000007;
  }
  if (g) ++start;
  --m;
  long long ans = 0;
  while (true) {
    long long x = C(n + m - start, m);
    if (!x) break;
    start += 2;
    ans += x;
    ans %= 1000000007;
  }
  if (!m) {
    if (((n & 1) && g) || ((!(n & 1)) && (!g))) {
      --ans;
      ans = ((ans % 1000000007) + 1000000007) % 1000000007;
    } else {
      ++ans;
      ans %= 1000000007;
    }
  }
  if (m < 0)
    if (((n & 1) && (!g)) || ((!(n & 1)) && g)) ++ans;
  printf("%I64d", ans);
  return 0;
}
