fn main() {
    println!("{}", solve())
}

fn solve() -> usize {
    let mut primes = vec![];

    for n in 2..=1000000 {
        let prime_check_max = (n as f64).sqrt().ceil() as usize;
        let mut is_prime = true;
        for prime in primes.clone() {
            if n % prime == 0 {
                is_prime = false;
                break;
            } else if prime > prime_check_max {
                break;
            }
        }
        if is_prime {
            primes.push(n);
        }
    }

    let mut chain_length = primes.len() - 1;
    loop {
        for prime_window in primes.windows(chain_length) {
            let sum = prime_window.iter().map(|&prime| prime).sum::<usize>();
            if primes.contains(&sum) {
                return sum;
            }
            if sum > 1000000 {
                break;
            }
        }
        chain_length -= 1;
    }
}