This method uses a counter and 1 query. Only 3 posts from each post type can ever be displayed.
$args = array(
'post_type' => array( 'type1', 'type2', 'type3' ),
'posts_per_page' => -1
);
$myquery = new WP_Query( $args );
$type1 = 0; $type2 = 0; $type3 = 0; $count = 0;
while ( $myquery->have_posts() ) : $myquery->the_post();
if ( $post->post_type == 'type1' ) $type1++;
if ( $post->post_type == 'type1' && $type1 > 3 ) continue;
if ( $post->post_type == 'type2' ) $type2++;
if ( $post->post_type == 'type2' && $type2 > 3 ) continue;
if ( $post->post_type == 'type3' ) $type3++;
if ( $post->post_type == 'type3' && $type3 > 3 ) continue;
$count++; if ( $count > 9 ) continue;
// Do Stuff
endwhile;
This might not be the best solution if you have a really large amount of posts because it will loop through all the posts and if the count is higher than 3 for the given post type it will go back to the beginning of the loop.