#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <numeric>
//#include <stdio.h>
//#include <stack>
//#include <queue>
//#include <cstdio>
#include <cmath>
#include <iterator>
#include <map>
#include <fstream>
//#include <list>
#include <iomanip>
//#include <stdlib.h>
//#include <cctype>

using namespace std;

const int MAX_N = 1000000;
#define IOS ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define prec std::cout << std::fixed << std::setprecision(15);
#define endl "\n"
//#define MOD 1000000007
#define Int int64_t
#define PI 3.14159265358979
#define rep(i, n) for (int i = 0; i < int(n); i++)
#define ssort(z) sort(z.begin(), z.end())
#define rsort(z) sort(z.rbegin(), z.rend())
#define eerase(z) z.erase(unique(z.begin(), z.end()), z.end())
#define ccnt(z, w) count(z.begin(), z.end(), w)
#define rep(i,a,n) for(Int (i)=(a); (i)<(n); (i)++)
#define repq(i,a,n) for(Int (i)=(a); (i)<=(n); (i)++)

template <typename T>
void printV(const std::vector<T>& v, const char * const separator = " ")
{
    if(!v.empty())
    {
        std::copy(v.begin(),
                  --v.end(),
                  std::ostream_iterator<T>(std::cout, separator));
        std::cout << v.back() << "\n";
    }
}


Int gcd(Int a, Int b) {
    return b != 0 ? gcd(b, a % b) : a;
}

Int lcm(Int a, Int b) {
    return a / gcd(a, b) * b;
    //a*bは64bit integer overflow
}

int Max(int a, int b, int c) {
    int temp = max(a, b);
    return max(temp, c);
}

int Min(int a, int b, int c) {
    int temp = min(a, b);
    return min(temp, c);
}

bool integer(double num) {
    return floor(num) == num;
}

Int fact(int num) {
    if (num == 0)
        return 1;
    else
        return num * fact(num - 1);
}

void y() {
    cout << "Yes" << endl;
    exit(0);
}

void n() {
    cout << "No" << endl;
    exit(0);
}

void Y() {
    cout << "YES" << endl;
    exit(0);
}

void N() {
    cout << "NO" << endl;
    exit(0);
}

Int yakusu(int n) {
    int cnt = 0;
    for (int i = 1; i * i <= n; i++) {
        if (n % i == 0) {
            cnt++;
            if (i * i != n) cnt++;
        }
    }
    return cnt;
}

/*   kokomade  */

int cnt = 0;
bool is_prime[ 50000 + 1 ];
vector<int> P;
void Eratosthenes( const int N )
{
    for( int i = 0; i <= N; i++ )
    {
        is_prime[ i ] = true;//初期化
    }
    for( int i = 2; i <= N; i++ )
    {
        if( is_prime[ i ] )
        {
            for( int j = 2 * i; j <= N; j += i )
            {
                is_prime[ j ] = false;
            }
            P.emplace_back( i );
        }
    }
}
bool compare_by_b(pair<int, int> a, pair<int, int> b) {
    if(a.second != b.second){
        return a.second < b.second;
    }else{
        return a.first < b.first;
    }
}
vector< int64_t > divisor(int64_t n) {
    vector< int64_t > ret;
    for(int64_t i = 1; i * i <= n; i++) {
        if(n % i == 0) {
            ret.push_back(i);
            if(i * i != n) ret.push_back(n / i);
        }
    }
    sort(begin(ret), end(ret));
    return (ret);
}


void euclid(Int N, Int a, Int b)
{
    for (Int d = a+b; d <= N; d += b) {
        //cout << b << ", " << d << endl;
        euclid(N, b, d);
    }
}

//Int nnn(Int n){
//    Int a=1;
//    for (Int l = 1; l <= n; ++l) {
//        a=a*l%MOD;
//    }
//    if(n<2)return 1;
//    else return a;
//}


//Int modInverse(Int a, Int p) {
//    //calculates the modular multiplicative of a mod m.
//    //(assuming p is prime).
//    return modPow(a, p-2, p);
//}
//Int modBinomial(Int n, Int k, Int p) {
//// calculates C(n,k) mod p (assuming p is prime).
//
//    Int numerator = 1; // n * (n-1) * ... * (n-k+1)
//    for (Int i=0; i<k; i++) {
//        numerator = (numerator * (n-i) ) % p;
//    }
//
//    Int denominator = 1; // k!
//    for (Int i=1; i<=k; i++) {
//        denominator = (denominator * i) % p;
//    }
//
//    // numerator / denominator mod p.
//    return ( numerator* modInverse(denominator,p) ) % p;
//}
const Int MAX = 1000000000;
const Int MOD = 1000000007;

vector<Int> fac, finv, inv;

// テーブルを作る前処理
void COMinit() {
    //fac[0] = fac[1] = 1;
    fac.push_back(1);
    fac.push_back(1);
    finv.push_back(1);
    finv.push_back(1);
    //finv[0] = finv[1] = 1;
    //inv[1] = 1;
    inv.push_back(1);
    inv.push_back(1);
    for (Int i = 2; i < MAX; i++){
        fac.push_back(fac[i - 1] * i % MOD);
        //fac[i] = fac[i - 1] * i % MOD;
        inv.push_back(MOD - inv[MOD%i] * (MOD / i) % MOD);
        //inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv.push_back(finv[i - 1] * inv[i] % MOD);
        //finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}

// 二項係数計算
Int COM(Int n, Int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
//long modPow(long a, long x, long p) {
//    //calculates a^x mod p in logarithmic time.
//    long res = 1;
//    while(x > 0) {
//        if( x % 2 != 0) {
//            res = (res * a) % p;
//        }
//        a = (a * a) % p;
//        x /= 2;
//    }
//    return res;
//}
Int modPow(Int a, Int x, Int p) {
    //calculates a^x mod p in logarithmic time.
    Int res = 1;
    while(x > 0) {
        if( x % 2 != 0) {
            res = (res * a) % p;
        }
        a = (a * a) % p;
        x /= 2;
    }
    return res;
}
Int modInverse(Int a, Int p) {
    //calculates the modular multiplicative of a mod m.
    //(assuming p is prime).
    return modPow(a, p-2, p);
}
Int modBinomial(Int n, Int k, Int p) {
// calculates C(n,k) mod p (assuming p is prime).

    Int numerator = 1; // n * (n-1) * ... * (n-k+1)
    for (Int i=0; i<k; i++) {
        numerator = (numerator * (n-i) ) % p;
    }

    Int denominator = 1; // k!
    for (Int i=1; i<=k; i++) {
        denominator = (denominator * i) % p;
    }

    // numerator / denominator mod p.
    return ( numerator* modInverse(denominator,p) ) % p;
}
Int fact_mod(Int n, Int mod) {
    Int f = 1; repq(i,2,n) f = f * (i % MOD) % MOD;
    return f;
}

// 繰り返し二乗法 (modの世界での累乗)
// ※modが素数の場合、この関数で(mod - 2)乗したら、mod割り算ができるよ！
// (参考問題: ABC034 C問題など)
Int mod_pow(Int x, Int n, Int mod) {
    Int res = 1;
    while(n > 0) {
        if(n & 1) res = (res * x) % mod; //ビット演算(最下位ビットが1のとき)
        x = (x * x) % mod;
        n >>= 1; //右シフト(n = n >> 1)
    }
    return res;
}

// 組み合わせ nCr を求める (modあり)
Int combination_mod(Int n, Int r, Int mod) {
    if(r > n-r) r = n-r;
    if(r == 0) return 1;
    Int a = 1;
    rep(i, 0, r) a = a * ((n-i) % mod) % mod;
    Int b = mod_pow(fact_mod(r, mod), mod-2, mod);
    return (a % mod) * (b % mod) % mod;
}
int main() {
    //COMinit();
    IOS;
    prec;
    Int a,b,n,k,x,y=0,ans=0;
    string str,s,t,u;
    cin>>n>>a>>b;
    ans=mod_pow(2,n,MOD)-1;
    ans%=MOD;
    ans-=combination_mod(n,a,MOD);
    if (ans<0)ans+=MOD;
    ans%=MOD;
    ans-=combination_mod(n,b,MOD);

    if (ans<0)ans+=MOD;
    //ans%=MOD;
    //if (n==2 and a==1 and b==1)ans=1;
    cout<<ans;




    cout<<endl;
    return 0;
}

/*
テレビも無ェ ラジオも無ェ
自動車もそれほど走って無ェ
ピアノも無ェ バーも無ェ
巡査 毎日ぐーるぐる
朝起ぎで 牛連れで
二時間ちょっとの散歩道
電話も無ェ 瓦斯も無ェ
バスは一日一度来る
俺らこんな村いやだ 俺らこんな村いやだ
東京へ出るだ 東京へ出だなら
銭コァ貯めで 東京でベコ(牛)飼うだ
*/


Measured memory_bytes: 256