import qualified Data.Vector.Unboxed as U
import qualified Data.ByteString.Char8 as C
import Data.List


r :: Int -> IO (U.Vector Int)
r n = U.unfoldrN n (C.readInt . C.dropWhile (==' ')) <$> C.getLine

r' :: IO [Int]
r'  =   unfoldr    (C.readInt . C.dropWhile (==' ')) <$> C.getLine

mdl :: Num a => a
mdl = 10^9 + 7

t a b = a * b `mod` mdl

positivize x = if x < 0 then x + mdl else x

main :: IO ()
main = do
    [n,a,b] <- r' :: IO [Int]
    let al = powMod 2 n - 1
    let na = chooseOpt n a
    let nb = chooseOpt n b
    print $ positivize $ (al - na - nb) `mod` mdl

powMod :: Int -> Int -> Int
powMod cur 0 = 1
powMod cur n
    | even n = powMod (t cur cur) (div n 2)
    | odd n  = (t cur) $! powMod (t cur cur) (div n 2)

chooseOpt n i
    | n-i < i   = choose n (n-i)
    | otherwise = choose n i
    where
    choose :: Int -> Int -> Int
    choose n i = t (prod' $ U.generate i (+ (n-i+1)) ) $ modInv (prod' $ U.generate i succ)

prod' :: U.Vector Int -> Int
prod' = U.foldr' t 1

modInv :: Int -> Int
modInv a =  let (x,_,1) = eEA a mdl
            in  positivize x

eEA :: Int -> Int -> (Int, Int, Int)
eEA a 0 = (1, 0, a)
eEA a b =   let (q, r) = a `quotRem` b
                (s, t, g) = eEA b r
            in  (t, s-q*t, g)