fn main() { let stdin = std::io::read_to_string(std::io::stdin().lock()).unwrap(); let mut stdin = stdin.split_ascii_whitespace(); let n: usize = stdin.next().unwrap().parse().unwrap(); let x: Vec = (0..n) .map(|_| stdin.next().unwrap().parse().unwrap()) .collect(); use std::io::Write; std::io::stdout() .lock() .write_all(output(solve(x)).as_bytes()) .unwrap(); } fn solve(mut x: Vec) -> u32 { x.sort_unstable(); let x = x; let mut count_at = vec![0; 1_000_001]; x.into_iter().map(|x| { count_at[x as usize] += 1; let cur_count = count_at[x as usize]; ((x * 2)..).step_by(x as usize).take_while(|&i| i <= 1_000_000).for_each(|i| count_at[i as usize] = count_at[i as usize].max(cur_count)); cur_count }).max().unwrap() } fn output(ans: u32) -> String { ans.to_string() + "\n" }