posts_per_page – Repeats only first posts ‘post__in’ array

You don’t need the sort within the loop if you pass the correct orderby argument. You’ve got order_by with an underscore, where it should be orderby, no underscore.

You can then set paged to the page number you want, and posts_per_page to however many you want on each page. Right now you don’t set a page number to retrieve, so you’re always going to get the same set of posts.

Have a look at pagination parameters on WP_Query Codex page.