import java.io.* ;
import java.util.* ;
public class CarefulWithPoison {
try {
while ( ! st.hasMoreTokens ( ) ) {
if ( s == null )
return null ;
}
return st.nextToken ( ) ;
return null ;
}
}
int max = 2000000 + 10 ;
fact = new long [ max] ;
fact[ 0 ] = fact[ 1 ] = 1 ;
for ( int k = 2 ; k < max; k++ ) {
fact[ k] = ( k * fact[ k- 1 ] ) % MOD;
}
while ( true ) {
int N
= Integer .
parseInt ( next
( ) ) ; if ( N == 0 ) {
break ;
}
int a
= Integer .
parseInt ( next
( ) ) ; int b
= Integer .
parseInt ( next
( ) ) ; long A = ways( N+ N, N) ;
long B = count( N, a+ 2 , b) ;
long C = count( N, a+ 1 , b+ 1 ) ;
long D = count( N, a, b+ 2 ) ;
long ans = ( A - ( ( B+ C+ D) % MOD) + MOD) % MOD;
out.println ( ans) ;
}
//
out.flush ( ) ;
}
static long [ ] fact;
static long MOD = 1000000007 ;
static long count( int N, int a, int b) {
return ( ways( a+ b, a) * ways( N - a + N - b, N - a) ) % MOD;
}
static long ways( int N, int K) {
long ans = fact[ N] * modInverse( fact[ K] ) ;
ans %= MOD;
ans *= modInverse( fact[ N- K] ) ;
return ans % MOD;
}
static long modInverse( long x) {
return modPow( x, MOD - 2 , MOD ) ;
}
static long modPow( long x, long pow, long mod) {
long res = 1 ;
while ( pow > 0 ) {
if ( ( pow& 1 ) != 0 ) res = ( res * x) % mod;
pow >>= 1 ;
x = ( x* x) % mod;
}
return res;
}
}
CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuKjsKCnB1YmxpYyBjbGFzcyBDYXJlZnVsV2l0aFBvaXNvbiB7CgoJc3RhdGljIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKCXN0YXRpYyBQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKFN5c3RlbS5vdXQpKTsKCXN0YXRpYyBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKCIiKTsKCglwdWJsaWMgc3RhdGljIFN0cmluZyBuZXh0KCkgewoJCXRyeQl7CgkJd2hpbGUgKCFzdC5oYXNNb3JlVG9rZW5zKCkpIHsKCQkJU3RyaW5nIHMgPSBici5yZWFkTGluZSgpOwoJCQlpZiAocyA9PSBudWxsKQoJCQkJcmV0dXJuIG51bGw7CgkJCXN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzKTsKCQl9CgkJcmV0dXJuIHN0Lm5leHRUb2tlbigpOwoJCX0JY2F0Y2goRXhjZXB0aW9uIGUpCXsKCQkJcmV0dXJuCW51bGw7CgkJfQoJfQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXNkYSkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJaW50IG1heCA9IDIwMDAwMDAgKyAxMDsKCQlmYWN0ID0gbmV3IGxvbmcgW21heF07CgkJZmFjdFswXSA9IGZhY3RbMV0gPSAxOwoJCWZvciAoaW50IGsgPSAyOyBrIDwgbWF4OyBrKyspCXsKCQkJZmFjdFtrXSA9IChrICogZmFjdFtrLTFdKSAlIE1PRDsKCQl9CgoJCXdoaWxlCSh0cnVlKQl7CgkJCWludCBOID0gSW50ZWdlci5wYXJzZUludCggbmV4dCgpICk7CgkJCWlmIChOID09IDApIHsKCQkJCWJyZWFrOwoJCQl9CgkJCWludCBhID0gSW50ZWdlci5wYXJzZUludCggbmV4dCgpICk7CgkJCWludCBiID0gSW50ZWdlci5wYXJzZUludCggbmV4dCgpICk7CgkJCWxvbmcgQSA9IHdheXMoTitOLCBOKTsKCQkJbG9uZyBCID0gY291bnQoTiwgYSsyLCBiKTsKCQkJbG9uZyBDID0gY291bnQoTiwgYSsxLCBiKzEpOwoJCQlsb25nIEQgPSBjb3VudChOLCBhLCBiKzIpOwoKCQkJbG9uZyBhbnMgPSAoQSAtICgoQitDK0QpJU1PRCkgKyBNT0QpICUgTU9EOwoJCQlvdXQucHJpbnRsbihhbnMpOwoJCX0KICAgICAgICAvLwogICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgfQogICAgc3RhdGljIGxvbmcgW10gZmFjdDsKICAgIHN0YXRpYyBsb25nIE1PRCA9IDEwMDAwMDAwMDc7CgogICAgc3RhdGljIGxvbmcgY291bnQoaW50IE4sIGludCBhLCBpbnQgYikJewogICAgCXJldHVybgkod2F5cyhhK2IsIGEpICogd2F5cyhOIC0gYSArIE4gLSBiLCBOIC0gYSkpICUgTU9EOwogICAgfQogICAgc3RhdGljIGxvbmcgd2F5cyhpbnQgTiwgaW50IEspCXsKICAgIAlsb25nIGFucyA9IGZhY3RbTl0gKiBtb2RJbnZlcnNlKCBmYWN0W0tdICk7CiAgICAJYW5zICU9IE1PRDsKICAgIAlhbnMgKj0gbW9kSW52ZXJzZSggZmFjdFtOLUtdICk7CiAgICAJcmV0dXJuCWFucyAlIE1PRDsKICAgIH0KCiAgICBzdGF0aWMgbG9uZyBtb2RJbnZlcnNlKGxvbmcgeCkJewoJCXJldHVybgltb2RQb3coIHgsIE1PRCAtIDIsIE1PRCApOwoJfQogICAgc3RhdGljIGxvbmcgbW9kUG93KGxvbmcgeCwgbG9uZyBwb3csIGxvbmcgbW9kKQl7CgkJbG9uZyByZXMgPSAxOwoJCXdoaWxlCSggcG93ID4gMCApCXsKCQkJaWYJKCAocG93JjEpICE9IDAgKQlyZXMgPSAocmVzICogeCkgJSBtb2Q7CgkJCXBvdyA+Pj0gMTsKCQkJeCA9ICh4KngpICUgbW9kOwoJCX0KCQlyZXR1cm4gcmVzOwoJfQp9Cg==