// Original C++ solution (slower):
#include <bits/stdc++.h>



using namespace std;



using ll = long long;

using Vi = vector<int>;

using Vl = vector<ll>;

using Pii = pair<int, int>;

using Pll = pair<ll, ll>;



constexpr int I_INF = numeric_limits<int>::max();

constexpr ll L_INF = numeric_limits<ll>::max();



//==================================



// ModInt

//

// 宣言:

// ModInt<1000000007> mi;

// ModInt<1000000007> mi(917856986);

//

template <std::int_fast64_t Modulus>

class ModInt {

    using i64 = std::int_fast64_t;



    // friend

    template <std::int_fast64_t _MOD>

    friend std::istream& operator>>(std::istream& is, ModInt<_MOD>& rhs);

    template <std::int_fast64_t _MOD>

    friend std::ostream& operator<<(std::ostream& os, const ModInt<_MOD>& rhs);



private:

    i64 m_value;



public:

    /**

     * コンストラクタ

     */

    constexpr ModInt(const i64 x = 0) noexcept : m_value(x % Modulus) {

        if (m_value < 0) m_value += Modulus;

    }



    constexpr const i64& value() const noexcept { return m_value; }



    constexpr ModInt operator+(const ModInt& rhs) const noexcept {

        return ModInt(*this) += rhs;

    }

    constexpr ModInt operator-(const ModInt& rhs) const noexcept {

        return ModInt(*this) -= rhs;

    }

    constexpr ModInt operator*(const ModInt& rhs) const noexcept {

        return ModInt(*this) *= rhs;

    }

    constexpr ModInt operator/(const ModInt& rhs) const noexcept {

        return ModInt(*this) /= rhs;

    }



    constexpr ModInt& operator+=(const ModInt rhs) noexcept {

        m_value += rhs.m_value;

        if (m_value >= Modulus) {

            m_value -= Modulus;

        }

        return *this;

    }

    constexpr ModInt& operator-=(const ModInt rhs) noexcept {

        if (m_value < rhs.m_value) {

            m_value += Modulus;

        }

        m_value -= rhs.m_value;

        return *this;

    }

    constexpr ModInt& operator*=(const ModInt rhs) noexcept {

        m_value = m_value * rhs.m_value % Modulus;

        return *this;

    }

    constexpr ModInt& operator/=(ModInt rhs) noexcept {

        i64 exp = Modulus - 2;

        while (exp) {

            if (exp & 1) {

                *this *= rhs;

            }

            rhs *= rhs;

            exp >>= 1;

        }

        return *this;

    }



    constexpr ModInt& operator++() noexcept {

        *this += 1;

        return *this;

    }

    constexpr ModInt operator++(int) noexcept {

        ModInt res = *this;

        *this += 1;

        return res;

    }

    constexpr ModInt& operator--() noexcept {

        *this -= 1;

        return *this;

    }

    constexpr ModInt operator--(int) noexcept {

        ModInt res = *this;

        *this -= 1;

        return res;

    }



    constexpr bool operator<(const ModInt& rhs) const noexcept {

        return m_value < rhs.m_value;

    }

    constexpr bool operator>(const ModInt& rhs) const noexcept {

        return m_value > rhs.m_value;

    }

    constexpr bool operator<=(const ModInt& rhs) const noexcept {

        return m_value <= rhs.m_value;

    }

    constexpr bool operator>=(const ModInt& rhs) const noexcept {

        return m_value >= rhs.m_value;

    }

    constexpr bool operator==(const ModInt& rhs) const noexcept {

        return m_value == rhs.m_value;

    }



    constexpr ModInt pow(i64 k) const noexcept {

        ModInt res = 1;

        ModInt tmp = *this;

        for (; k > 0; k >>= 1) {

            if (k & 1) res *= tmp;

            tmp *= tmp;

        }

        return res;

    }



    constexpr ModInt inverse() const noexcept {

        i64 q = m_value;

        i64 b = Modulus, u = 1, v = 0;

        while (b) {

            i64 t = q / b;

            q -= t * b;

            swap(q, b);

            u -= t * v;

            swap(u, v);

        }

        u %= Modulus;

        if (u < 0) u += Modulus;

        return u;

    }

};



// iostream用の関数[ModInt]

template <std::int_fast64_t Modulus>

std::istream& operator>>(std::istream& is, ModInt<Modulus>& rhs) {

    is >> rhs.m_value;

    return is;

}

template <std::int_fast64_t Modulus>

std::ostream& operator<<(std::ostream& os, const ModInt<Modulus>& rhs) {

    os << rhs.m_value;

    return os;

}



// 二項係数(mod)

// 要ModInt

template <std::int_fast64_t Modulus>

class ModComb {

    using i64 = int_fast64_t;

    using Vl = std::vector<i64>;



private:

    Vl fac, inv, finv;



public:

    ModComb(i64 n) : fac(n + 1), inv(n + 1), finv(n + 1) {

        fac[0] = fac[1] = 1;

        finv[0] = finv[1] = 1;

        inv[1] = 1;

        for (i64 i = 2; i < n + 1; ++i) {

            fac[i] = fac[i - 1] * i % Modulus;

            inv[i] = Modulus - inv[Modulus % i] * (Modulus / i) % Modulus;

            finv[i] = finv[i - 1] * inv[i] % Modulus;

        }

    }



    ModInt<Modulus> comb(i64 n, i64 k) {

        ModInt<Modulus> res;

        if (n < k)

            res = 0;

        else if (n < 0 || k < 0)

            res = 0;

        else

            res = fac[n] * (finv[n - k] * finv[k] % Modulus) % Modulus;

        return res;

    }



    ModInt<Modulus> get_fac(i64 n) { return ModInt<Modulus>(fac[n]); }

};



constexpr ll MOD = 1e9 + 7;



ModInt<MOD> comb(ll n, ll k) {

    ModInt<MOD> ans = 1, d = 1;

    for (ll i = 1; i <= k; i++) {

        ans *= n - i + 1;

        d *= i;

    }

    ans /= d;

    return ans;

}



int main() {

    cin.tie(0);

    ios::sync_with_stdio(false);



    ll n, a, b;

    cin >> n >> a >> b;



    ModInt<MOD> ans = ModInt<MOD>(2).pow(n);



    ans -= comb(n, 0) + comb(n, a) + comb(n, b);



    cout << ans << endl;



    return 0;

}

// Optimized solution to the same problem (faster):
#include <algorithm>

#include <cmath>

#include <cstdio>

#include <functional>

#include <iostream>

#include <map>

#include <queue>

#include <set>

#include <stack>

#include <string>

#include <vector>

using namespace std;

using ll = long long;



ll fact;

ll fact_inv;



const ll MOD = 1e9 + 7;

// 繰り返し二乗法

ll power(ll a, ll b) {

    ll res = 1;

    while (b > 0) {

        if (b & 1) res = res * a % MOD;

        a = a * a % MOD;

        b >>= 1;

    }

    return res;

}



int main() {

    ll n, a, b;

    cin >> n >> a >> b;

    ll ans = power(2, n) - 1;



    //nCa

    ll nca = 1;

    ll ncb = 1;



    ll x = 1, y = 1;



    for (int i = 0; i < a; i++) {

        x *= (n - i);

        x %= MOD;

        y *= (i + 1);

        y %= MOD;

    }

    nca = x * power(y, MOD - 2) % MOD;



    x = 1, y = 1;

    for (int i = 0; i < b; i++) {

        x *= (n - i);

        x %= MOD;

        y *= (i + 1);

        y %= MOD;

    }

    ncb = x * power(y, MOD - 2) % MOD;

    //cout << ans <<"\n" << nca << "\n" << ncb << " ";

    cout << (MOD * 3 + ans - (nca + ncb)) % MOD << "\n";



    return 0;

}


// Fastest known solution for this problem: